0

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

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

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

4

3 回答 3

1

e不是字符串。write需要一个字符串。用它制作一个字符串

repr(e)

或者

str(e)

取决于你想要什么样的输出。

于 2013-08-13T20:40:49.850 回答
1

print语句不同,该file.write函数只接受字符串。因此,您只需要显式转换为字符串:

errors.write(str(e))

当然在现实生活中的代码中,你经常想做一些格式化,所以你经常忘记这个。例如:

errors.write('Failed to exec {} with {}'.format(filename, e))

在这里,我们传递formatto的结果write,这很好,我们将e作为参数传递给format,这也很好……事实上,我们已经在中间进行了到字符串的隐式转换,这很容易被忽略。

实际上有两种不同的方法可以将值表示为字符串,str并且repr, butstrprint使用的一种,所以这可能是您在这里想要的。

于 2013-08-13T20:41:18.800 回答
1

write() 方法需要一个字符串作为参数。您需要将异常对象转换为字符串:

try: 
    execfile("AEAPER.py")
except Exception as e:
    errors.write(str(e))

见这里:http ://docs.python.org/2/library/stdtypes.html#file.write

于 2013-08-13T20:46:00.463 回答