未处理异常的错误回溯消息在哪里写 - sys.stdout 或 sys.stderr 或其他地方? 在 Python 中

问题描述

根据我的理解,在 Python 中,sys.stdinsys.stdoutsys.stderr 分别是链接到标准输入、输出错误流的文件对象。现在可以将 stdoutstderr 文件对象更改为任意文件,以便将它们记录在控制台之外的其他位置。

我这样做了,一切正常。但是,我注意到如果出现未处理的异常,则会抛出一条错误回溯消息,该消息显示在控制台中。这表明此回溯消息未定向到 stdoutstderr

请在下面找到运行的代码

import sys

old_stdout,old_stderr = sys.stdout,sys.stderr
sys.stdout,sys.stderr = open('Outfile.txt','w'),open('Errorlog.txt','w')

try:
    name = input('Enter your name: ')
    print('Hi %s' % name)
    age = int(input('What is your age? '))
    if age <= 0:
        raise ValueError('Age cannot be 0.')
    else:
        print('So how does it feel to be %d' % age)
# except Exception as e:
#     print(e)
finally:
    sys.stderr.close(),sys.stdout.close()
    sys.stderr,sys.stdout = old_stderr,old_stdout

当存在 except 块时,错误消息将按照标准输出中的预期打印(即 Outfile.txt)。当 except 块被注释掉以使其成为未处理的异常时,回溯将打印在控制台中,如下所示:

F:\> python.exe Change_stdout_stderr_to_log_files.py
Anirban
0
Traceback (most recent call last):
  File "Change_stdout_stderr_to_log_files.py",line 18,in <module>
    raise ValueError('Age cannot be 0.')
ValueError: Age cannot be 0.

F:\> 

虽然没有打印关于 stdout 或 stderr 中的错误。那么这条错误信息实际上指向哪里?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...