我想知道在python(3.2,如果相关的话)中是否有可能发生这样的事情。
with assign_match('(abc)(def)', 'abcdef') as (a, b):
print(a, b)
行为在哪里:
- 如果正则表达式匹配,则正则表达式组被分配到
a
和b
- 如果那里不匹配,它会抛出异常
- 如果匹配
None
,它将完全绕过上下文
我的目标基本上是一种非常简洁的上下文行为方式。
我尝试制作以下上下文管理器:
import re
class assign_match(object):
def __init__(self, regex, string):
self.regex = regex
self.string = string
def __enter__(self):
result = re.match(self.regex, self.string)
if result is None:
raise ValueError
else:
return result.groups()
def __exit__(self, type, value, traceback):
print(self, type, value, traceback) #testing purposes. not doing anything here.
with assign_match('(abc)(def)', 'abcdef') as (a, b):
print(a, b) #prints abc def
with assign_match('(abc)g', 'abcdef') as (a, b): #raises ValueError
print(a, b)
它实际上完全符合正则表达式匹配的情况,但是,如您所见,它会抛出ValueError
if there's no match。有什么办法可以让它“跳”到退出序列?
谢谢!!