29

同じループ内で約10個の異なるファイルを開いて書き込む必要があります。例えば:

for i in range(0,10):
    try:
        a=5
        file1 = open("file1.txt",'w+')
        file2 = open("file2.txt",'w+')
        #... etc

        print(str(a),file=file1)
        print(str(a)+"hi",file=file2)
        # ... etc
    except: 
        #error handling

今私がやりたいことは、一般的な例外内でどのファイルが開かれている/書き込まれているかなど、特定の例外情報を取得できるようにすることです。私の現在の理解から、私が望むものを達成するには、次のようなことをしなければなりません:

for i in range(0,5):
    a=5
    try:
        file1 = open("file1.txt",'w+')
        print(str(a),file=file1)
    except: 
        #error handling for file1
    try:
        file2 = open("file2.txt",'w+')
        print(str(a)+"hi",file=file2)
    except: 
        #error handling for file2

...約10個の異なるファイルに対してこれを行う必要がある場合、これは非常に不格好で魅力的ではなくなります。最初の例のように、(たとえば) 一般的な例外からファイル名情報を取得する方法はありますか? 基本的に、例外は、特に file1 操作の try/except なしで、「file1 への書き込み時のエラー」のようなものを報告する可能性があります。

編集: これは、ファイルに書き込まれるデータを大幅に簡略化したものです。str(a) および str(a)+"hi" は、実際に書き込まれているデータを適切に表現したものではありません。file1 にはハードコードされた整数が必要な場合があり、file2 には複数の変数でフォーマットされた文字列が必要な場合があります。オープン/書き込みプロセスをループに一般化することは、うまく機能しません。

4

4 に答える 4

47

sys.exc_info例外オブジェクト自体を含む、現在処理中の例外に関する情報を取得するために使用できます。例外IOErrorには、ファイル名、エラー番号、エラーを説明する文字列など、必要なすべての情報が含まれています。

import sys

try:
    f1 = open('example1')
    f2 = open('example2')
except IOError:
    type, value, traceback = sys.exc_info()
    print('Error opening %s: %s' % (value.filename, value.strerror))

ブロック内の実行はtry、最初の例外の後も明らかに停止します。

于 2013-04-08T23:44:20.467 に答える
23

tracebackモジュールを使用します。

traceback.print_exc()
于 2015-03-05T21:31:10.320 に答える