微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用自动包含 try 和 except

如何解决用自动包含 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 举报,一经查实,本站将立刻删除。