Pythonを学ぶ上で、プログラムを書いていると必ずと言っていいほどエラーが出てきます。プログラムのエラーを素早く解決するためには、エラーハンドリングの知識が必要です。この記事では、Pythonでのエラーについて、エラーハンドリングとは、Pythonでのエラーハンドリングの方法、try-except文の基本的な使い方、エラーの種類とそれぞれの対処法、具体的なエラーハンドリングの例について解説します。
Pythonでのエラーについて
Pythonでのエラーは、大きく分けて次の3種類に分類されます。
- SyntaxError(構文エラー)
- RuntimeError(実行時エラー)
- LogicalError(論理エラー)
SyntaxErrorは、プログラムの文法が間違っている場合に発生します。たとえば、括弧の閉じ忘れ、コンマの抜け漏れ、変数名の誤字などが原因となります。
print("Hello, World!"
上記のコードは、括弧が閉じていないためSyntaxErrorが発生します。
RuntimeErrorは、プログラムが実行される際に発生するエラーです。たとえば、ゼロ除算、存在しないファイルの読み込みなどが原因となります。
a = 10 b = 0 c = a / b print(c)
上記のコードは、ゼロ除算が発生するためRuntimeErrorが発生します。
LogicalErrorは、プログラムの論理が誤っている場合に発生します。たとえば、計算式の誤り、条件分岐の誤りなどが原因となります。
a = 10 b = 20 if a > b: print("aはbより大きい") else: print("bはaより大きい")
上記のコードは、論理が誤っているためLogicalErrorが発生します。(この処理では処理は中断しませんが後続処理で不具合が発生する可能性が高いです。)
エラーハンドリングとは
エラーハンドリングとは、プログラム中で発生したエラーを検知し、適切に処理することです。エラーハンドリングにより、プログラムが停止することなく処理を続けることができます。
Pythonでのエラーハンドリングの方法
Pythonでのエラーハンドリングには、try-except文を使用します。tryブロック内でエラーが発生した場合、exceptブロックが実行されます。
try: # エラーが発生するかもしれないコード except: # エラーが発生した場合の処理
tryブロック内でエラーが発生すると、exceptブロックが実行されます。exceptブロックには、エラーの種類を指定することができます。
try: # エラーが発生するかもしれないコード except エラーの種類: # エラーが発生した場合の処理
また、複数のエラーを指定することもできます。
try: # エラーが発生するかもしれないコード except (エラーの種類1, エラーの種類2): # エラーが発生した場合の処理
さらに、exceptブロックを複数指定することもできます。
try: # エラーが発生するかもしれないコード except エラーの種類1: # エラーが発生した場合の処理1 except エラーの種類2: # エラーが発生した場合の処理2
try-except文の基本的な使い方
try-except文の基本的な使い方を見てみましょう。
try: a = 10 b = 0 c = a / b print(c) except ZeroDivisionError: print("ゼロ除算が発生しました")
上記のコードでは、ゼロ除算が発生する可能性があるため、tryブロックで計算を行っています。ゼロ除算が発生した場合、exceptブロックが実行され、”ゼロ除算が発生しました”というメッセージが表示されます。
エラーの種類とそれぞれの対処法
Pythonには多くのエラーが存在します。代表的なエラーとそれぞれの対処法を紹介します。
SyntaxError
SyntaxErrorは、プログラムの文法が間違っている場合に発生します。SyntaxErrorが発生した場合は、エラーメッセージを確認し、文法に誤りがあるかどうかを確認します。
print("Hello, World!"
上記のコードは、括弧が閉じていないためSyntaxErrorが発生します。
NameError
NameErrorは、定義されていない変数を使用した場合に発生します。NameErrorが発生した場合は、変数名のスペルを確認するか、変数を定義する必要があります。
print(a)
上記のコードは、変数aが定義されていないためNameErrorが発生します。
TypeError
TypeErrorは、異なる型のオブジェクトを使用した場合に発生します。TypeErrorが発生した場合は、オブジェクトの型を確認し、必要に応じて型変換を行います。
a = "10" b = 20 c = a + b
上記のコードは、文字列と数値を加算しようとしているためTypeErrorが発生します。
ZeroDivisionError
ZeroDivisionErrorは、ゼロ除算を行った場合に発生します。ZeroDivisionErrorが発生した場合は、ゼロ除算を行わないようにプログラムを修正する必要があります。
a = 10 b = 0 c = a / b
上記のコードは、ゼロ除算が発生するためZeroDivisionErrorが発生します。
FileNotFoundError
FileNotFoundErrorは、存在しないファイルを読み込んだ場合に発生します。FileNotFoundErrorが発生した場合は、ファイルの存在を確認するか、ファイルパスを正しく指定する必要があります。
with open("sample.txt") as f: data = f.read()
上記のコードは、存在しないファイルを読み込んでいるためFileNotFoundErrorが発生します。
具体的なエラーハンドリングの例
具体的なエラーハンドリングの例を見てみましょう。
try: with open("sample.txt") as f: data = f.read() print(data) except FileNotFoundError: print("ファイルが存在しません")
上記のコードでは、”sample.txt”というファイルを読み込んでいます。ファイルが存在しない場合、FileNotFoundErrorが発生します。try-except文を使用して、FileNotFoundErrorが発生した場合には、”ファイルが存在しません”というメッセージを表示するようにしています。
まとめ
Pythonでのエラーについて、エラーハンドリングとは、Pythonでのエラーハンドリングの方法、try-except文の基本的な使い方、エラーの種類とそれぞれの対処法、具体的なエラーハンドリングの例について解説しました。プログラムを書いていると必ずエラーが発生するため、エラーハンドリングの知識を身につけておくことは非常に重要です。