保存文件错误的错误例外

时间:2013-08-13 20:33:15

标签: python exception python-2.7 exception-handling error-handling

我遇到一些问题,一小段代码无法正常工作,我完全不知道为什么......

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

我的代码有什么问题,为什么会这样做?

3 个答案:

答案 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也很好......事实上我们在中间完成了对字符串的隐式转换很容易错过。

实际上有两种不同的方法可以将值表示为字符串strrepr,但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