如何解决Python“with”语句抛出错误
class test :
def __init__(self,text) :
self.text = text
def __enter__(self) :
print("some text" + self.text)
def __exit__(self,*args) :
self.text = None
print(args)
return True
with test("hello world") :
pass
with test(12) :
pass
我在 __enter__
函数中使用字符串连接,这样如果 text 参数是一个 int,就会出现一个 TypeError
(但不应该因为 with 语句而被抛出)
如果在分配给目标列表的过程中发生错误,它将被视为套件中发生的错误。
如果套件因异常退出,并且 exit() 方法的返回值为 false,则重新引发异常。如果返回值为真,则异常被抑制,并继续执行 with 语句之后的语句。
所以这里 __exit__
返回 True 那么为什么当我运行这个示例代码时,会抛出一个错误?
感谢您的帮助
解决方法
您代码中的第二个示例从不调用 __exit__
方法,因为 __enter__
方法会引发错误。传递给 __exit__
的所有错误处理都发生在 __enter__
完成之后的代码块中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。