Python traceback.print_exc()是否打印到stdout或stderr?

时间:2015-12-02 15:36:08

标签: python exception-handling

我已经阅读了一些Python docs,但我无法找到print_exc函数的打印位置。所以我搜索了一些堆栈溢出,它说" print_exc()将格式化的异常打印到stdout"。 Link

我一直很困惑。在我看来,这个功能应该打印到stderr,因为它的错误!..什么是对的?

3 个答案:

答案 0 :(得分:8)

它打印到stderr,从以下测试中可以看出:

$ cat test.py
try:
    raise IOError()
except:
    import traceback
    traceback.print_exc()
$ python test.py
Traceback (most recent call last):
  File "test.py", line 2, in <module>
     raise IOError()
IOError
$ python test.py > /dev/null
Traceback (most recent call last):
  File "test.py", line 2, in <module>
     raise IOError()
IOError
$ python test.py 2> /dev/null
$

答案 1 :(得分:3)

根据python documentation状态“如果省略文件或None,则输出转到sys.stderr;否则它应该是一个打开的文件或类似文件的对象来接收输出。” 这意味着您可以控制输出的打印方式/位置。

with open(outFile) as fp
    print_exc(fp)

以上示例将打印到文件'outFile'

答案 2 :(得分:3)

BTW你也可以控制它:

import traceback
import sys



try:
    raise Exception
except Exception as E:
    traceback.print_exc(file=sys.stderr)