将Pythons错误写入txt文件

时间:2010-01-25 19:58:01

标签: python error-handling

我无法正常工作(很明显) - 我几乎都在那里,我很清楚为什么它不起作用 - 只是不知道如何让它工作。

这假设尝试将文件读入内存,如果失败则转到代码块的“except”子句(该部分为'duh')。错误文件打印:“< main .DebugOutput instance in 0x04021EB8>”。我想要它做的是打印实际的错误。像FileIOError或TraceBackError或该错误文件的任何内容。这只是开始阶段,我计划添加日期戳等内容并将其附加,而不是写入/创建 - 我只需要将实际错误打印到文件中。建议?

import os, sys

try:
    myPidFile = "Zeznadata.txt"
    myOpenPID_File = open(myPidFile, "r") #Attempts to open the file
    print "Sucessfully opened the file: \"" + myPidFile + "\"."

except:
    print "This file, \"" + myPidFile + "\", does not exist.  Please check the file name and try again.  "
    myFileErr = open("PIDErrorlog.txt", "w")
    myStdError = str(sys.stderr)
    myFileErr.write(myStdError)
    myFileErr.close()
    print "\nThis error was logged in the file (and stored in the directory): "

4 个答案:

答案 0 :(得分:7)

首先,您应该使用日志库。它将帮助您处理不同的日志记录级别(信息/警告/错误),时间戳等。

http://docs.python.org/library/logging.html

其次,您需要捕获错误,然后您可以记录有关它的详细信息。这个例子来自Python文档。

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())

except IOError as (errno, strerror):
    print "I/O error({0}): {1}".format(errno, strerror)
except ValueError:
    print "Could not convert data to an integer."
except:
    print "Unexpected error:", sys.exc_info()[0]
    raise

了解它如何捕获IOError并将错误号和错误消息分配给变量?您可以为要处理的每种类型的错误设置except块。在最后一个(通用错误)块中,它使用sys.exc_info()[0]来获取错误详细信息。

http://docs.python.org/tutorial/errors.html

答案 1 :(得分:3)

问题在于:

 myStdError = str(sys.stderr)
 myFileErr.write(myStdError)

sys.stderr是一个类似于文件的接口,在POSIX标准中定义,称为standard error,而不是“错误文本”,可以写入文件。所以你(可能)想要做的是:

sys.stderr = myFileErr

这是在unix shell中等同于python your_python_sctipt.py 2> PIDErrorLog.txt的python。

答案 2 :(得分:1)

使用日志记录模块。日志记录模块具有异常格式化程序,可帮助您以漂亮的方式打印异常。

http://docs.python.org/library/logging.html

答案 3 :(得分:0)

像Kimvais所说,你的问题是:

myStdError = str(sys.stderr)
myFileErr.write(myStdError)

sys.stderr是stderr的文件句柄(stdout是print写入的内容)。

您应该执行以下操作:

try:
    ...open file...
except IOError as (errno, strerror):
    ...open errfile...
    errfile.write(strerror)
    errfile.close()

艾莉森的回答也非常好,写得很好。