みなさん、こんにちは。Crossinのプログラミング教室へようこそ。
プログラムを作成するときに、いくつかの例外を報告することがよくあります。一方では、あなた自身の怠慢がプログラムにエラーメッセージを表示させたためです。他方では、クロール時など、プログラムの実行中にいくつかの例外が避けられないためです。構造に一貫性のないWebページがいくつかありますが、現時点では、同じコードセットの2つのWebページでミスが発生するため、エラーメッセージが原因でプログラムが終了しないように例外をキャッチする必要があります。
Pythonには多くの組み込みの例外があります。つまり、Python開発者は、ユーザープログラミング中にこのようなエラーが発生する可能性があることを事前に考慮しているため、これらの組み込みの例外を作成すると、エラー情報をユーザーにすばやく正確にフィードバックして、コードのバグを見つけることができます。
すべての組み込みの例外とトリガー条件は、公式のPythonドキュメントにも記載されています。読みやすくするために、すべての例外とトリガー条件をマインドマップに整理しました(クリックして拡大、水平方向に表示)。
HDバージョンのダウンロードアドレスは記事の最後に添付されています
以下は、いくつかの一般的な例外の個別の紹介であり、例を通じて、どの例外がどのような条件下でトリガーされるかについての詳細な理解です。
SyntaxErrorは主に、コロンの欠落、複数の引用符など、Python構文のエラーが原因で発生します。プログラミング中に少し不注意を行うとエラーが発生します。これは最も一般的な異常エラーです。
In [1]: While True print('1')
File "<ipython-input-1-8ebf67bb4c2b>", line 1
While True print('1')^
SyntaxError: invalid syntax
TypeErrorはタイプエラーです。つまり、整数タイプと文字タイプの加算と減算、2つのリスト間の減算など、不適切なタイプのオブジェクトに操作または関数が適用された場合に発生します。
In [8]: a =[1,2];b =[2,3]
In [9]: a-b
---------------------------------------------------------------------------
TypeError Traceback(most recent call last)<ipython-input-9-5ae0619f8fe1>in<module>---->1 a-b
TypeError: unsupported operand type(s)for-:'list' and 'list'
IndexErrorは、インデックスのエラーを指します。たとえば、最も一般的な添え字インデックスがシーケンスの境界を超えています。たとえば、シーケンスmに要素が3つしかない場合、m [4]にアクセスしようとします。
In [16]: m =[1,2,3]
In [17]: m[4]---------------------------------------------------------------------------
IndexError Traceback(most recent call last)<ipython-input-17-94e0dfab3ff6>in<module>---->1 m[4]
IndexError: list index out of range
KeyErrorはキーワードエラーです。この例外は主に辞書で発生します。たとえば、ユーザーが辞書に存在しないキーにアクセスしようとすると発生します。
In [18]: dict_ ={'1':'yi','2':'er'}
In [19]: dict_['3']---------------------------------------------------------------------------
KeyError Traceback(most recent call last)<ipython-input-19-c2e43847635f>in<module>---->1 dict_['3']
KeyError:'3'
ValueErrorは値エラーであり、値のタイプが正しい場合でも、たとえばリストに存在しない値のインデックスを取得する場合など、呼び出し元が予期しない値をユーザーが渡したときに発生します。
In [22]: n =[1,2,3]
In [23]: n.index(4)---------------------------------------------------------------------------
ValueError Traceback(most recent call last)<ipython-input-23-9a1887cf29d7>in<module>---->1 n.index(4)
ValueError:4 is not in list
AttributeErrorは、ユーザーがオブジェクトに存在しない属性にアクセスしようとしたときに発生する属性エラーです。たとえば、リストにはインデックスメソッドがありますが、ディクショナリにはないため、ディクショナリオブジェクトでこのメソッドを呼び出すと例外が発生します。
In [25]: dict_ ={'1':'yi','2':'er'}
In [26]: dict_.index('1')---------------------------------------------------------------------------
AttributeError Traceback(most recent call last)<ipython-input-26-516844ad2563>in<module>---->1 dict_.index('1')
AttributeError:'dict' object has no attribute 'index'
NameErrorは、変数名のエラーを指します。たとえば、ユーザーが割り当てまたは初期化されていない変数を呼び出そうとするとトリガーされます。
In [27]:print(list_)---------------------------------------------------------------------------
NameError Traceback(most recent call last)<ipython-input-27-87ebf02ffcab>in<module>---->1print(list_)
NameError: name 'list_' is not defined
FileNotFoundErrorはファイルを開くエラーであり、ユーザーが読み取りモードで存在しないファイルを開こうとすると発生します。
In [29]: fb =open('./list','r')---------------------------------------------------------------------------
FileNotFoundError Traceback(most recent call last)<ipython-input-29-1b65fe5400ea>in<module>---->1 fb =open('./list','r')
FileNotFoundError:[Errno 2] No such file or directory:'./list'
StopIterationはイテレーターエラーです。イテレーターの最後の値までアクセスが継続されると、この例外が発生し、イテレーターにアクセスする値がないことをユーザーに通知します。
In [30]: list1 =[1,2]
In [31]: list2 =iter(list1)
In [33]:next(list2)
Out[33]:1
In [34]:next(list2)
Out[34]:2
In [35]:next(list2)---------------------------------------------------------------------------
StopIteration Traceback(most recent call last)<ipython-input-35-5a5a8526e73b>in<module>---->1next(list2)
AssertionErrorはアサーションエラーです。ユーザーがアサーションステートメントを使用して例外を検出した場合、アサーションステートメントによって検出された式がfalseの場合、この例外が発生します。
In [45]: list3 =[1,2]
In [46]: assert len(list3)>2---------------------------------------------------------------------------
AssertionError Traceback(most recent call last)<ipython-input-46-ffd051e2ba94>in<module>---->1 assert len(list3)>2
AssertionError:
上記の異常は、通常のプログラミングで頻繁に発生する部分です。その他の種類の異常については、上記のマインドマップまたは公式文書を参照してください。もちろん、Pythonは、ユーザーが必要に応じて例外をカスタマイズすることもサポートしています。
Pythonには、例外のキャッチ、積極的な例外のスローなど、例外を処理するための強力な機能もあります。主に次の方法があります。
この記事のマインドマップはBaiduマインドマップを使用して描かれています。オンラインディスクにも入れています。自分で追加および変更できます。
マインドマップのダウンロード:
https://pan.baidu.com/s/1X4NIoRec1umU6Dhh9GobQQ
抽出コード:tcwy
公式文書:
https://docs.python.org/3/library/exceptions.html#base-classes
著者:タフィー猫
出典:Meow Talking Python
_ 以前の記事の推奨事項_
[ ある記事では、Pythonの異常な情報を理解する方法を説明しています](http://mp.weixin.qq.com/s?__biz=MjM5MDEyMDk4Mw==&mid=2650168776&idx=2&sn=e965016f826c8c90062323f7a2a26e0b&chksm=be4b50b0893bc9a64