如何解决用自动包含 try 和 except
是否可以定义自己的 with
语句,该语句自动包含 try...except 错误处理?
例如,对此有一个简写会很好:
with Do_Something():
try:
...
except Exception as e:
print(str(e))
...看起来像这样:
with Try_Something():
...
我们如何将 try...except 行为包含到以下 MWE 类中?
class Do_Something():
def __init__(self):
pass
def __enter__(self):
print('Starting...')
# invoke "try" somewhere here?
return(self)
def __exit__(self,except_type,except_value,tb):
# invoke "except" somewhere here?
解决方法
根据the docs,如果你想抑制异常,__exit__
应该返回True
。
传递给 __exit__
的参数将描述异常情况,以防您想做出有条件的决定。
看起来 with
本身就带有 try
,并将异常作为参数传播给 __exit__(...)
。所以这可能是一个合适的解决方案:
import traceback
class Try_Something():
def __init__(self):
pass
def __enter__(self):
print('Starting...')
# invoke "try" somewhere here? -- No,"with" automatically invokes "try"
return(self)
def __exit__(self,except_type,except_value,tb):
if not except_type:
print('finished.')
else:
print('failed.')
traceback.print_exc() # prints error similar to str(e) from the question
return(True)
我没有找到没有 import traceback
的解决方案。请评论是否有办法使用提供的参数直接打印回溯信息而无需额外模块。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。