2.1 例外の作成
勝てないなら、率いるべし。プログラムでエラーを避けられない場合、エラーをコントロールする方法を学ぶ必要があります。そのために、例外を意識的に作る方法を学びましょう。
最もシンプルな例外の例は、 ゼロでの除算です。そしてプログラムもシンプル:
x = 100 / 0
このコードはエラーで実行されます:
Traceback (most recent call last):
File "", line 1, in
x = 100 / 0
~~~^~
ZeroDivisionError: division by zero
ZeroDivisionErrorは例外の名前で、division by zeroはその短い説明です。また、Pythonはこの例外が発生した行番号を教えてくれます。
データ型の不一致
もちろん、他の例外もあります。例えば、文字列と数値を足そうとすると:
s = "100" + 100
例外TypeErrorが発生します:
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'str' and 'int'
リストの範囲外アクセス
もう一つの非常に一般的なエラーは、リストに存在しない要素にアクセスしようとすることです:
my_list = [1, 2, 3]
print(my_list[10])
例外IndexErrorが発生します:
Traceback (most recent call last):
print(my_list[10])
~~~~~~~^^^^
IndexError: list index out of range
全部でどれくらいあるのでしょうか?数千種類の例外があります。さらに、特定の状況を説明するために、既存のものでは不足する場合、自分で作ることも可能です。しかし、最も人気のあるものはそれほど多くありません。
2.2 人気のある例外一覧
たくさんの例外がありますが、初心者としては最も人気のあるものを知っておくと良いでしょう。以下にそれらの表を示します:
| 例外 | 説明 |
|---|---|
Exception |
全ての例外の基底クラス。 |
IndexError |
シーケンス(例:リストやタプル)の存在しないインデックスにアクセスしようとしたときに発生します。 |
KeyError |
辞書に存在しないキーにアクセスしようとしたときに発生します。 |
NameError |
存在しない変数にアクセスしようとしたときに発生します。 |
RuntimeError |
他の型の例外に関連しない一般的な実行時エラーが発生したときに発生します。 |
StopIteration |
イテレーションの終了を知らせるために発生します。 |
SyntaxError |
コードに構文エラーがあるときに発生します。 |
IndentationError |
コードのインデントエラーのときに発生します(SyntaxErrorのサブタイプ)。 |
TabError |
インデントのためにタブとスペースの混在があるときに発生します(IndentationErrorのサブタイプ)。 |
TypeError |
互換性のないデータ型で操作を試みたときに発生します。 |
UnboundLocalError |
宣言される前にローカル変数にアクセスしようとしたときに発生します(NameErrorのサブタイプ)。 |
ValueError |
関数や操作に不適切な値の引数を渡したときに発生します。 |
ZeroDivisionError |
ゼロで除算しようとしたときに発生します。 |
たぶん、初心者として、学習の最初の月にこれらすべてのエラーに遭遇するでしょう。そして、それは悪いことではありません—エラーを通じて学習するのです。
2.3 コード内のエラー
コード内でエラーが発生するいくつかの状況を見てみましょう。そうすれば、コード内でエラーを見つけやすくなります:
IndentationError
このタイプのエラーは、コード内のインデントが正しくないときに発生します。例えば、タブとスペースを混在させたり、インデントの数が正しくない場合です。
def example():
print("Hello")
print("World") # 間違ったインデントがIndentationErrorを引き起こします
example()
NameError
def example():
print(undeclared_variable) # 宣言されていない変数を使用しようとするとNameErrorが発生します
example()
ValueError
このタイプのエラーは、操作や関数が正しい型の引数を受け取ったが、値が不適切であるときに発生します。
def example():
int("abc") # 数値でない文字列を変換しようとするとValueErrorが発生します
example()
KeyError
このタイプのエラーは、プログラムが辞書内の存在しないキーにアクセスしようとしたときに発生します。
def example():
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # 存在しないキーにアクセスしようとするとKeyErrorが発生します
example()
SyntaxError
このタイプのエラーは、コードに構文エラーがあるときに発生します。つまり、Pythonの文法に合わないコードです。
def example():
eval("if True print('Hello')") # 間違った構文がSyntaxErrorを引き起こします
example()
注意した者は武装している。これで、エラーを引き起こす状況を認識したり作成したりできます。次のステップは、これらのエラーを処理する方法を学ぶことです。
GO TO FULL VERSION