gpt4 book ai didi

python - 为什么 sys.excepthook 不起作用?

转载 作者:太空狗 更新时间:2023-10-30 00:10:52 27 4
gpt4 key购买 nike

如果我尝试执行这段代码,为什么 sys.excepthook 函数没有被调用?

import sys;
def MyExcepthook(ex_cls, ex, tb):

print("Oops! There's an Error.\n");

a=open("./ERR.txt","w"); #Fixed as suggested by unutbu BUT the problem is the same!
a.write("Oops! There's an Error.\n");
a.close();

sys.excepthook = MyExcepthook;

def main():
print(1/0);

if (__name__=="__main__"):
main();

输出:

Traceback (most recent call last):
File "C:\Users\Path\to\my\python\file.py", line 13, in <module>
main();
File "C:\Users\Path\to\my\python\file.py", line 10, in main
print(1/0);
ZeroDivisionError: division by zero

预期输出(通过 print):

Oops! There's an Error.

并且应该创建一个新文件 (Err.txt)(通过打开)

print 函数不显示文本并且没有创建文件,因为未调用 sys.excepthook 函数 - 为什么?

-->编辑我的问题是由 idle-python 3.4 中的错误引起的,因为现在我尝试通过解释器 python(命令行)运行代码并且它有效!如果不警告 idle-python 3.4 中的这个错误,这会使我的问题变得毫无用处,我很抱歉,感谢您的帮助!

[解决方案] 如果有人遇到我同样的问题 => 尝试通过命令行运行您的代码!而不是来自 IDE。

最佳答案

您的自定义 excepthook 本身不得引发异常:

a=open("./ERR.txt")   # opens the file in read mode

应该是

a=open("./ERR.txt", 'w')  # open the file in write mode.

当自定义 excepthook 引发异常时,您应该看到像

Oops! There's an Error.

Error in sys.excepthook:
...
IOError: [Errno 2] No such file or directory: './ERR.txt'

Original exception was:
...
ZeroDivisionError: integer division or modulo by zero

附言。不要忘记删除所有那些不必要的分号!

import sys
def my_excepthook(ex_cls, ex, tb):
msg = "Oops! There's an Error.\n"
print(msg)

with open("./ERR.txt", 'w') as a:
a.write(msg)

sys.excepthook = my_excepthook

def main():
print(1/0)

if __name__=="__main__":
main()

关于python - 为什么 sys.excepthook 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25495028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com