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渡していますが、これも問題ありません…途中で文字列への暗黙的な変換を行ったという事実は見落としがちです。eformat

str値を文字列として表現するにはrepr、実際には 2 つの異なる方法がありstrますprint

于 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 に答える