我遇到一些问题,一小段代码无法正常工作,我完全不知道为什么......
errors = open('ERROR(S).txt', 'w')
try:
execfile("AEAPER.py")
except Exception as e:
errors.write(e)
errors.close()
我收到以下错误:
Traceback (most recent call last):
File "C:\Sator.py", line 45, in <module>
periodically(2, -1, +1, callscripts)
File "C:\Sator.py", line 27, in periodically
s.run()
File "C:\Python27\lib\sched.py", line 117, in run
action(*argument)
File "C:\Sator.py", line 36, in callscripts
errors.write(e)
TypeError: expected a character buffer object
我的代码有什么问题,为什么会这样做?
答案 0 :(得分:1)
e
不是字符串。 write
需要一个字符串。用
repr(e)
或
str(e)
取决于您想要的输出类型。
答案 1 :(得分:1)
与print
语句不同,file.write
函数只接受字符串。所以,你只需要明确地转换为字符串:
errors.write(str(e))
当然,在现实代码中,您经常需要进行一些格式化,因此您经常会忘记这一点。例如:
errors.write('Failed to exec {} with {}'.format(filename, e))
在这里,我们将format
的结果传递给write
,这很好,我们将e
作为参数传递给format
,这是str
也很好......事实上我们在中间完成了对字符串的隐式转换很容易错过。
实际上有两种不同的方法可以将值表示为字符串str
和repr
,但print
是{{1}}使用的方式,所以它可能是什么你想要的。
答案 2 :(得分:1)
write()方法需要一个字符串作为参数。您需要将异常对象转换为字符串:
try:
execfile("AEAPER.py")
except Exception as e:
errors.write(str(e))
见这里:http://docs.python.org/2/library/stdtypes.html#file.write