首页 > 解决方案 > 如何打印出异常来自的行

问题描述

def println(text: str):
    try:
    print(text)
    if not type(text) == str:
        raise TypeError(f"argument \"text\" should be type \"str\". not type \"{type(text)}\"".)
    except TypeError as err:
         print(err)

这工作正常,它说:

argument "text" should be type "str". not type "<class 'int'>".

但我看不到它来自哪条线路。它来自第 4 行,并没有说明错误来自哪一行。这使得调试错误变得困难和令人沮丧。

标签: pythonpython-3.x

解决方案


import traceback
traceback.print_exc()

将使用解释器用于未捕获异常的相同默认回溯格式。

或者,更好的是,根本不捕获异常并让它在其他地方处理?如果您确实需要包装异常以更改其类型或消息,您可以这样做

except SomeException as exc:
    raise RuntimeError("a thing broke") from exc

这将保留原始异常和回溯。


推荐阅读