我无法正常工作(很明显) - 我几乎都在那里,我很清楚为什么它不起作用 - 只是不知道如何让它工作。
这假设尝试将文件读入内存,如果失败则转到代码块的“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): "
答案 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]
来获取错误详细信息。
答案 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)
使用日志记录模块。日志记录模块具有异常格式化程序,可帮助您以漂亮的方式打印异常。
答案 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()
艾莉森的回答也非常好,写得很好。