ここの Python 初心者で、私のコードで奇妙な動作が発生しています。
ファイルにデータを書き込もうとしています。次のコード ブロックを呼び出す前に、データの長さを約 50k に出力します。データはインターネットで入手したpdfファイルです。そしてそれは有効なpdfです。
以下で説明する関数 F() を呼び出すと、失敗した実際の場所ではなく、関数 F に例外メッセージが出力されます。
以下のコードでは、関数 write_to_disk() で 2 番目の出力が表示され、実行は呼び出し関数 F() の例外ハンドラーに直接ジャンプします。なぜこれが起こっているのかわかりません。ディスク上にファイルが作成されていることがわかりますが、サイズは 0 です。
以下のコードを見て、何が起こっているのか推測できますか? write_to_disk() 関数で例外をキャッチしている場合、関数から完全に飛び出すにはどうすればよいですか?
編集: kobejohn に感謝します。excetion オブジェクトに errno 変数がないことが判明しました。それを取り除くと、プリントが表示されました。しかし、より大きな問題はまだ存在します。失敗する理由を見つける方法がない失敗が見られます。ここでエラーメッセージを取得するにはどうすればよいですか?
def write_to_disk(self, pathToWrite, pdfFileData):
try:
print 'Here `1.1'
fd = open(pathToWrite, "w+")
print 'Here `2.1'
fd.write(pdfFileData)
print 'Here 3.1'
fd.close()
except Exception as e:
print 'file cannot be opened ' + pathToWrite + e.errno
この関数は、次のような別の関数 F によって呼び出されます -
def F(self, url):
pathWrite = get_path_to_use()
pdfData = get_pdf_data(url)
try:
writetodisk(pathToWrite, pdfData)
except Exception as e:
print 'Did I jump directly to here?' + e.errno
これがプログラムの出力です。何も役に立たないので、何も追加しないと思いました。実際、pdbで実行しても同じ出力が得られます。
Here `1.1
Here `2.1
Did I jump directly to here?