Pythonの例外が「エラー」(例えば命名されているなぜZeroDivisionError
、NameError
、TypeError
)およびない「例外」(例えばZeroDivisionException
、NameException
、TypeException
)。
私はJavaのバックグラウンドを持っており、最近Pythonを学び始めました。これは、Javaではエラーと例外が区別されるため、混乱を招きます。
Pythonにも違いはありますか?
回答:
名前に「Class」が含まれる各クラスと、名前に「_variable」が含まれる各変数に名前を付けることはありません。「例外」という単語を使用して例外に名前を付けないのと同じ方法です。名前は、オブジェクトの意味について何かを言う必要があります。「エラー」はほとんどの例外の意味です。
すべての例外がエラーであるとは限りません。SystemExit
、KeyboardInterrupt
、StopIteration
、GeneratorExit
すべての例外はないエラーです。実際のエラーの「エラー」という言葉は違いを示しています。
「エラー」は「例外」よりも短いです。これにより、意味を失うことなく、コード幅を数文字節約できます。それはいくつかの違いを生みます。
この規則はPEP8-Pythonコードのスタイルガイドから来ていると思います:
例外名
例外はクラスである必要があるため、ここではクラスの命名規則が適用されます。ただし、例外名には接尾辞「エラー」を使用する必要があります(例外が実際にエラーである場合)。
Pythonは、この点でJavaにかなり似ています。ただし、Pythonの例外はJavaのThrowableと比較する必要があります。
Throwablesには、エラー、RuntimeException、および(チェックされた)例外など、あらゆる種類のフレーバーがありますが、Pythonも同様です(チェックされた例外はありません)。
言語に関しては、エラーは例外的であるため、継承階層は奇妙ではありません。
Exceptionという名前は特に好きではありません。例外は、例外的な状況(できればエラーなど)だけでなく、制御フローから抜け出すためにも使用されます。それが例外が行うことだからです。通常の制御フローからマークされたポイントにジャンプします。後藤に少し似ていますが、より洗練されています。
とはいえ、適切な戻り値が見つからない状況が発生するたびに、例外を使用する傾向があります。どちらもPythonでもJavaでも。
Error
名前に含まれることが多い理由の問題に実際に対処することはありません。
簡単に言えば:
Exception
また、直接上昇させることができます概念:
私は通常これを行いますが、例外を作成します
または
これは通常はエラーですが、例外を作成してキャッチし、いくつかの手順を実行します。
詳細:
例外とエラー:
https://docs.python.org/2/tutorial/errors.html
実行中に検出されたエラーは例外と呼ばれ、無条件に致命的ではありません
ワークフロー:
ただのネーミングです。Javaでは、これらの種類のエラーをオフにする必要があるためjava.lang.Error
、他Throwable
のとは異なります。Pythonでは、すべての例外がチェックされていないため、区別は無意味です。
class ExceptionHandlingException extends RuntimeException
を読むのは恐ろしいことです。
Warning
。私の答えを見てください。