0

try ...exceptブロックで、例外パスのファイルに例外エラーメッセージを記録したいと思います。

try:
   doc = etree.parse(urllib2.urlopen(url))
except Exception, e:

   print '%s: %s' % (e, url)
   with open('error.txt', 'a') as f:
     f.write('%s:%s\n' % url, e)
   return

印刷にはエラーが表示されますが、with open...f.writeは実行されません。

同じスクリプトで、relaxng検証がファイルに書き込まれます

if not RELAXNG.validate(doc):
  with open('error.txt', 'a') as f:
    f.write('%s\n' % RELAXNG.error_log)
  return

誰かが私に説明できますか、なぜ

with open('myfile.txt', 'a') as f
  f.write( ...

ifステートメントでは可能ですが、 except?では不可能です。

4

3 に答える 3

4

write()複数の引数を受け入れません。おそらく括弧がありません:

f.write('%s:%s\n' % (url, e))

それ以外の場合は、相対パスではなく絶対パスを使用してください。そうしないと、予期しない場所にファイルを簡単に書き込むことができます。

于 2013-03-07T12:06:10.153 に答える
0

内部のファイル操作は正常にexcept機能します。

>>> try:
    raise SyntaxError("Hello")
except Exception:
    with open("in.txt") as f:
        print "F"


F
于 2013-03-07T12:07:36.527 に答える
0

動作するはずです。たとえば、これを試してください。

try:
    raise Exception
except Exception:
    with open('error.txt', 'a') as f:
        f.write('foobar')

上記を実行すると、foobarがファイルに書き込まれていることがわかります。

error.txtはプロセスで書き込み可能ですか?ファイルに書き込まないのにはいくつかの理由がありますが、それは「with」ファイルコンテキストがexceptブロック内で許可されていないためではありません。

于 2013-03-07T12:11:33.657 に答える