Kev*_*lan 19 python exception-handling
我有一些代码可以执行一些功能异常处理,一切运行正常,当我想要它们时会引发异常,但是当我调试时,行跟踪并不总是完全符合我的要求.
例A:
>>> 3/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)
例B:
>>> try: 3/0
... except Exception as e: raise e
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)
在这两个示例中,异常实际发生在第1行,我们尝试执行3/0,但在后一个示例中,我们被告知它发生在第2行,它被引发.
在Python中是否有一种方法可以引发异常,就好像它是另一个异常,会产生以下输出:
>>> try: 3/0
... except Exception as e: metaraise(e)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
Run Code Online (Sandbox Code Playgroud)
Fal*_*rri 26
当您重新引发捕获的异常时,例如
except Exception as e: raise e
Run Code Online (Sandbox Code Playgroud)
它重置堆栈跟踪.这就像重新提出一个新的例外.你想要的是这个:
except Exception as e: raise
Run Code Online (Sandbox Code Playgroud)
作为参考,解决方案大致如下:
def getException():
return sys.exc_info()
def metaraise(exc_info):
raise exc_info[0], exc_info[1], exc_info[2]
try: 3/0
except:
e = getException()
metaraise(e)
Run Code Online (Sandbox Code Playgroud)
其中很漂亮的部分是你可以传递变量e并将其元化到其他地方,即使在此过程中遇到了其他异常.
归档时间: |
|
查看次数: |
20771 次 |
最近记录: |