python-3.x - sys.excepthook 不返回异常
问题描述
我正在尝试记录未处理的异常,但我似乎无法让“sys.excepthook”正常运行。代码似乎运行没有错误,但它什么也没做。谢谢。
我已经尝试将它记录到文件中,意识到我的日志记录代码确实有效,所以将它切换到不同的代码只是为了看看我是否可以测试 sys.excepthook。
import sys
def handleException(excType, value, traceback):
print('work plz')
sys.excepthook = handleException
raise RuntimeError("Test unhandled")
或者
import sys
def handleException(excType, value, traceback):
print('work plz')
sys.excepthook = handleException
c = "a" + 2
返回
Traceback (most recent call last):
File "C:/Users/x/Desktop/python/marketing/3/log_test.py", line 7, in <module>
raise RuntimeError("Test unhandled")
RuntimeError: Test unhandled
我期待有“工作请”
编辑:这似乎是 IDLE 的一个问题,如果我直接运行程序并尝试登录到文件它可以工作,但是如果我尝试通过 IDLE 运行它它不会。这很奇怪,但我想是固定的。
解决方案
IPython 不支持sys.excepthook
拦截异常的方式。也许您可以尝试以下方式。
class ExceptionHandler(object):
def __init__(self):
...
def __call__(self, *exception_info):
"""Handles exceptions"""
...
def as_ipython_handler(self):
def handle_ipython(shell, exception_type, value, tb, tb_offset=None):
# shell.showtraceback((exception_type, value, tb), tb_offset=tb_offset)
self(exception_type, value, tb)
return traceback.format_tb(tb)
return handle_ipython
try:
# print("ipython_shell")
ipython_shell = get_ipython() # only work on ipython
ipython_shell.set_custom_exc((Exception,), ExceptionHandler().as_ipython_handler())
except NameError as e:
# print("console")
sys.excepthook = ExceptionHandler()
推荐阅读
- machine-learning - 为什么CNN输出的概率不匹配?
- r - 在 x 轴的左侧和右侧添加自定义标签 - R ggplot2
- c# - Linq to XML - 读取多个属性的值
- python-3.x - ABAQUS使用Python保存打开的excel“Book1”
- ssh - Ansible 使用密码配置跳转主机
- c - C - 将二维数组传递给函数仅打印第一行
- node.js - 使用 Express 的 Node.js 3rd 方 API 调用
- css - 如何使 flexbox 列忽略子 div 的子项的高度
- mysql - Laravel - 通过 json_extract 和 eloquent select 获取一个简单数组的值
- c - 将字符串放入结构中会引发在 C 中转储的分段错误核心