0

ここの 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?
4

2 に答える 2

2

int最初の例外ハンドラーは、別の文字列と( e.errno) を連結して文字列を作成しようとします。これにより、それ (printステートメント) が例外自体をスローします (その後、外側の例外ハンドラーによってキャッチされます)。

于 2013-10-11T14:00:04.827 に答える