Pythonの例外が「エラー」と呼ばれるのはなぜですか?


82

Pythonの例外が「エラー」(例えば命名されているなぜZeroDivisionErrorNameErrorTypeError)およびない「例外」(例えばZeroDivisionExceptionNameExceptionTypeException)。

私はJavaのバックグラウンドを持っており、最近Pythonを学び始めました。これは、Javaではエラーと例外が区別されるため、混乱を招きます。

Pythonにも違いはありますか?

回答:


95
  1. 名前に「Class」が含まれる各クラスと、名前に「_variable」が含まれる各変数に名前を付けることはありません。「例外」という単語を使用して例外に名前を付けないのと同じ方法です。名前は、オブジェクトの意味について何かを言う必要があります。「エラー」はほとんどの例外の意味です。

  2. すべての例外がエラーであるとは限りません。SystemExitKeyboardInterruptStopIterationGeneratorExitすべての例外はないエラーです。実際のエラーの「エラー」という言葉は違いを示しています。

  3. 「エラー」は「例外」よりも短いです。これにより、意味を失うことなく、コード幅を数文字節約できます。それはいくつかの違いを生みます。


2
すべての例外がエラーであるとは限りません:確かに、という名前の例外クラスから派生した例外がいくつかありますWarning私の答えをください。
DavidRR 2015年


1
Python3の最新の視覚化はここにあります:docs.python.org/3.6/library/exceptions.html#exception-hierarchy
Sebastian Jylanki 2017年

49

この規則はPEP8-Pythonコードのスタイルガイドから来ていると思います:

例外名

例外はクラスである必要があるため、ここではクラスの命名規則が適用されます。ただし、例外名には接尾辞「エラー」を使用する必要があります(例外が実際にエラーである場合)。


8

Pythonは、この点でJavaにかなり似ています。ただし、Pythonの例外はJavaのThrowableと比較する必要があります。

Throwablesには、エラー、RuntimeException、および(チェックされた)例外など、あらゆる種類のフレーバーがありますが、Pythonも同様です(チェックされた例外はありません)。

言語に関しては、エラーは例外的であるため、継承階層は奇妙ではありません。

Exceptionという名前は特に好きではありません。例外は、例外的な状況(できればエラーなど)だけでなく、制御フローから抜け出すためにも使用されます。それが例外が行うことだからです。通常の制御フローからマークされたポイントにジャンプします。後藤に少し似ていますが、より洗練されています。

とはいえ、適切な戻り値が見つからない状況が発生するたびに、例外を使用する傾向があります。どちらもPythonでもJavaでも。


-1; これが有用な洞察を提供するとは思わない。明確に定義せずに「例外的な状況」について話し、実際には正確ではない例外がどのように機能するか(「通常の制御フローからマークされたポイントにジャンプする」)を説明し、エラーとの区別を呼び出します。 JavaのRuntimeExceptionは、Pythonに同様の区別が存在するかのように(存在しません)、Pythonの例外がError名前に含まれることが多い理由の問題に実際に対処することはありません。
マークアメリー2015

4

Q. Pythonの例外に「エラー」という名前が付けられているのはなぜですか?

これは、ほとんどのPython例外がエラーまたは警告として分類されているためだと思います。Python例外の名前がで終わる場合Exception、この区別はできません。

警告の例としては、DeprecationWarningImportWarning

組み込みの例外については2.xクラス階層を3.xについては2.xクラス階層を参照しください。


3

簡単に言えば:

  • Pythonの例外は「エラー」という名前ではありません。
  • Pythonエラーは「エラー」と呼ばれます。
  • Pythonエラーは、発生、キャッチ、および例外として処理できます。
  • エラーとして始まったものは、エラーメッセージを表示しない処理された例外になる可能性があります。
  • Exceptionまた、直接上昇させることができます

概念:

私は通常これを行いますが、例外を作成します

または

これは通常はエラーですが、例外を作成してキャッチし、いくつかの手順を実行します。

詳細:

例外とエラー:

https://docs.python.org/2/tutorial/errors.html

実行中に検出されたエラーは例外と呼ばれ、無条件に致命的ではありません

ワークフロー:

  • プログラムはエラーを監視します。
  • エラーが発生したが、実行中にプログラムによって検出されなかった場合は、エラーメッセージが表示されます。
  • エラーが発生し、実行中にプログラムによって検出された場合、それは例外です。
  • 例外はプログラムで処理できます。それらは適切に処理されるか、エラーメッセージが表示されます。
  • プログラムによって処理されない例外は、未処理キャッチされない)例外であり、エラーメッセージになります。

1

ただのネーミングです。Javaでは、これらの種類のエラーをオフにする必要があるためjava.lang.Error、他Throwableのとは異なります。Pythonでは、すべての例外がチェックされていないため、区別は無意味です。


基本クラスはExceptionと呼ばれます(他の回答に関する私のコメントを参照してください)ので、子にもExceptionという名前を付けてみませんか?
エレナ

@エレナ:そうすると、最終的には次のようなものになってしまうので、それclass ExceptionHandlingException extends RuntimeExceptionを読むのは恐ろしいことです。
esko 2010年

2
他の人が投稿した他の理由は別として、Python標準ライブラリの名前は常に一貫しているとは限らないことに注意してください。
gustafc 2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.