python - 如何减少 Python 的异常提升输出?
问题描述
我有这行 Python 代码:
raise ValueError(f"Invalid input '{number}'")
当它引发异常时,我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/snowcrash/Code/Python/mycode/mycode.py", line 8, in __init__
raise ValueError(f"Invalid input '{number}'")
ValueError: Invalid input 'a1b2c3'
但是我更愿意得到:
File "/home/snowcrash/Code/Python/mycode/mycode.py", line 8, in __init__
ValueError: Invalid input 'a1b2c3'
我如何实现这一目标?
解决方案
sys.excepthook(type, value, traceback)
是在引发异常时执行打印的函数。您可以编写自己的函数(具有类似的签名)并简单地将其替换为:
sys.excepthook = myfunction
你可以在这个函数中做任何你想做的事情。例如,您可以记录到文件,或打印有关异常发生时程序状态的一些信息。您甚至可以根据异常的类型安排不同的事情发生。
但是,如果您只想格式化回溯消息,那么已经为您提供了许多方便的东西。您可以深入研究traceback
文档以获取详细信息,但这里有一个示例可以大致生成您想要的输出:
import sys, traceback
def myhook(type, value, tb):
trace = traceback.format_tb(tb, limit=1)
trace = trace[0].split("\n")[0]
exc = traceback.format_exception_only(type, value)[0]
print(trace + "\n" + exc)
sys.excepthook = myhook
number = "a1b2c3"
raise ValueError(f"Invalid input {number}")
产生以下输出:
File "scratch/so.py", line 14, in <module>
ValueError: Invalid input a1b2c3
特别注意使用traceback.format_tb
withlimit=1
来限制堆栈跟踪输出。模块中有很多这样的功能traceback
。
推荐阅读
- python - 防止睡眠模式 python (Wakelock on python)
- reactjs - NextJS - 无效的挂钩调用。Hooks 只能在函数组件的主体内部调用
- c# - 如何使用 .net 框架安装创建 c# 应用程序设置文件?
- ios - 创建新分支不会反映 Xcode 项目中的所有目标
- android - Gradle 同步失败:找不到任务“:cdvPrintProps”的参数的leftShift()方法
- firebase - 如何从异步函数中正确获取字符串?
- javascript - 如何使用javascript替换对象中的字符和符号
- android - 如何使用 volley 读取 XML 中的变量
- java - 有多个数据源时的Spring动态事务管理器
- python - python dockerpy 令牌问题使用 jupyter notebook 运行 docker