3

Pythonの例外をキャッチして、再発生させるのではなく、出力したいと思います。例えば:

def f(x):
    try:
        return 1/x
    except:
        print <exception_that_was_raised>   

これで次のようになります。

>>> f(0)
'ZeroDivisionError'

例外なく発生します。

巨大なtry-except-except...except句に考えられる各例外をリストする以外に、これを行う方法はありますか?

4

3 に答える 3

9

message例外の属性を使用するかe.__class__.__name__、基本例外クラスの名前が必要な場合、つまりZeroDivisionError'あなたの場合

In [30]: def f(x):
        try:
                return 1/x
        except Exception as e:
            print e.message
   ....:         

In [31]: f(2)
Out[31]: 0

In [32]: f(0)
integer division or modulo by zero

python 3.xでは、属性が削除されているため、どこかでmessage簡単に使用でき、同じままです。print(e)e.args[0]e.__class__.__name__

于 2012-11-13T15:55:54.237 に答える
3

これが私の仕事のやり方です:

try:
    0/0
except Exception as e:
    print e
于 2012-11-13T16:06:45.383 に答える
2
try:
    0/0
except ZeroDivisionError,e:
    print e
#will print "integer division or modulo by zero"

このようなもの、Pythonicダックタイピングを使用すると、エラーインスタンスをオンザフライで文字列に変換できます=)幸運=)

于 2012-11-13T16:30:06.807 に答える