私は C# の経験があり、最近 Python でプログラミングを始めました。例外がスローされたときは通常、完全なスタック トレースを表示しながら、さらに情報を追加する別の例外でそれをラップします。C# では非常に簡単ですが、Python ではどのように行うのでしょうか。
たとえば、C# では次のようになります。
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
Python でも同様のことができます:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
...しかし、これにより内部例外のトレースバックが失われます。
編集:両方の例外メッセージと両方のスタック トレースを表示し、その 2 つを関連付けたいと思います。つまり、出力で、ここで例外 X が発生し、次にそこで例外 Y が発生したことを確認したいのです。これは C# の場合と同じです。これは Python 2.6 で可能ですか? これまでのところ、Glenn Maynard の回答に基づくと、私ができる最善のことは、次のようです。
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
これにはメッセージとトレースバックの両方が含まれますが、トレースバックのどこでどの例外が発生したかは表示されません。
ベストアンサー1
Python3 について
Python 3 では次のことができます。
try:
raise MyExceptionToBeWrapped("I have twisted my ankle")
except MyExceptionToBeWrapped as e:
raise MyWrapperException("I'm not in a good shape") from e
次のような結果が生成されます。
Traceback (most recent call last):
...
MyExceptionToBeWrapped: ("I have twisted my ankle")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
...
MyWrapperException: ("I'm not in a good shape")