可以只打印(假设的)捕获并使用异常来处理以下情况:group
方法被调用None
,当没有匹配时返回。如果比赛失败时确实无事可做,则通过一行使用语句上下文管理器 https://docs.python.org/3/reference/datamodel.html#context-managers (3.4+)
from contextlib import suppress
with suppress(Exception):
print( re.match(r'hello(.*)world', line).group(1) )
为了避免忽略几乎肯定不应该在这里忽略的异常,例如SystemExit
and KeyboardInterrupt
, use
with suppress(BaseException):
...
现在,正如所要求的那样,它相当紧凑,并且其行为也符合预期。仅仅使用异常来缩短代码可能会被认为是误导,但也许会有进一步的用途。
正如评论中提到的,从 3.8 开始有赋值表达式 https://www.python.org/dev/peps/pep-0572/
if match := re.match(r'hello(.*)world', line):
print( match.group(1) )
这几乎直接匹配激励语义。然而,这个新功能引起了一些敏感的讨论,而仅仅使用它来缩短代码可能会造成混淆和误导,因为它与预期的 pythonic 方法不同。
我想补充一点,我建议不要担心一些额外的代码行,特别是避免模拟其他语言的样式和程序流程。使用当前语言本身的风格和习语具有巨大的价值。