Python の「内部例外」(トレースバック付き)?質問する

Python の「内部例外」(トレースバック付き)?質問する

私は 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")

おすすめ記事