0

Python エラーを管理する必要があります。たとえば、次のように入力すると:

>>> 1/0

私はお返しします:

Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    1/0
ZeroDivisionError: division by zero

しかし、このエラーを変数に保存する必要があります。私はこれを除いてtry..を使用します:

>>> try:
    f(0)
except Exception as err:
    print(err)

そして出力を見てください:

division by zero

私には十分ではありません。IDLE(または他のIDE)のようなエラー行番号が必要です(私はpython 3.3を使用しており、python 2.7は使用できません)

4

2 に答える 2

1

例外を変数 に保存しましerrexceptブロックの後でも、例外にバインドされています。

print(例外があまり表示されないという事実は、別の問題です。)

ただし、例外オブジェクトだけでなく、トレースバック オブジェクトが必要だったようです。これは自動的に変数にバインドされるわけではありませんが、手動で行うことができます。

try:
    1/0
except Exception:
    exc_type, exc_value, exc_traceback = sys.exc_info()

詳細については、を参照exc_infoしてください。

しかし、tracebackオブジェクトはかなり重いものであり、保管している限り、他のあらゆる種類の重いものを生かしておきます。トレースバックのように重くて相互にリンクされたオブジェクトを持ち歩かないようにする 1 つの方法は、オブジェクトから必要な情報だけを抽出することです。それがtracebackモジュールの目的です。

try:
    1/0
except Exception:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    exc_traceback = traceback.extract_tb(exc_traceback)

現在、traceback オブジェクトの代わりに、文字列と数値の小さなタプルのリストのみを持ち歩いています。

または、さらに簡単に、すぐにフォーマットするだけです。

    exc_traceback = traceback.format_tb(exc_traceback)
于 2013-11-01T22:19:31.183 に答える