python如何关闭异常自动关联上下文
这篇文章将为大家详细讲解有关python如何关闭异常自动关联上下文,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
如何关闭异常自动关联上下文
当你在处理异常时,由于处理不当或者其他问题,再次抛出另一个异常时,往外抛出的异常也会携带原始的异常信息。
就像这样子。
try:print(1/0)exceptExceptionasexc:raiseRuntimeError("Somethingbadhappened")
从输出可以看到两个异常信息
Traceback(mostrecentcalllast):File"demo.py",line2,in<module>print(1/0)ZeroDivisionError:divisionbyzeroDuringhandlingoftheaboveexception,anotherexceptionoccurred:Traceback(mostrecentcalllast):File"demo.py",line4,in<module>raiseRuntimeError("Somethingbadhappened")RuntimeError:Somethingbadhappened
如果在异常处理程序或 finally 块中引发异常,默认情况下,异常机制会隐式工作会将先前的异常附加为新异常的 __context__属性。这就是 Python 默认开启的自动关联异常上下文。
如果你想自己控制这个上下文,可以加个 from 关键字(from 语法会有个限制,就是第二个表达式必须是另一个异常类或实例。),来表明你的新异常是直接由哪个异常引起的。
try:print(1/0)exceptExceptionasexc:raiseRuntimeError("Somethingbadhappened")fromexc
输出如下
Traceback(mostrecentcalllast):File"demo.py",line2,in<module>print(1/0)ZeroDivisionError:divisionbyzeroTheaboveexceptionwasthedirectcauseofthefollowingexception:Traceback(mostrecentcalllast):File"demo.py",line4,in<module>raiseRuntimeError("Somethingbadhappened")fromexcRuntimeError:Somethingbadhappened
当然,你也可以通过with_traceback()方法为异常设置上下文__context__属性,这也能在traceback更好的显示异常信息。
try:print(1/0)exceptExceptionasexc:raiseRuntimeError("badthing").with_traceback(exc)
最后,如果我想彻底关闭这个自动关联异常上下文的机制?有什么办法呢?
可以使用 raise...from None,从下面的例子上看,已经没有了原始异常
$catdemo.pytry:print(1/0)exceptExceptionasexc:raiseRuntimeError("Somethingbadhappened")fromNone$$pythondemo.pyTraceback(mostrecentcalllast):File"demo.py",line4,in<module>raiseRuntimeError("Somethingbadhappened")fromNoneRuntimeError:Somethingbadhappened(PythonCodingTime)
关于“python如何关闭异常自动关联上下文”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
相关文章
- python(中无效的十进制怎么解决 python怎么转换进制)
- python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
- python(编程控制电脑关机 如何控制电脑关机)
- python中的特殊标识符(python 中 标识符中可以有逗号吗)
- python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
- python中字典定义的四种方法(python global关键字的用法详解)
- python(array用法 python如何对两个数组做差处理)
- python多行注释符号怎么表示
- python支持的操作系统是什么
- python如何判断列表为空
本站已关闭游客评论,请登录或者注册后再评论吧~