【问题标题】:Saving an error exceptions to file erroring out将错误异常保存到文件错误输出
【发布时间】:2013-08-15 15:16:03
【问题描述】:

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

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

我的代码出了什么问题,为什么会这样?

【问题讨论】:

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


    【解决方案1】:

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

    errors.write(str(e))
    

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

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

    在这里,我们将format 的结果传递给write,这很好,我们将e 作为参数传递给format,这也很好……事实上我们'中间做了隐式转换字符串很容易漏掉。

    实际上有两种不同的方式将值表示为字符串,strrepr,但 strprint 使用的方式,所以这可能是您想要的。

    【讨论】:

      【解决方案2】:

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

      repr(e)
      

      str(e)
      

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-13
          • 1970-01-01
          • 2010-12-27
          • 2016-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-25
          相关资源
          最近更新 更多