🐍
Pythonの基礎:エラーに対処する – 例外処理の基本を解説
Pythonでプログラムを書いていると、予期せぬエラーが発生することがあります。
このようなエラーに対して 例外処理(try-except) を使えば、プログラムの異常終了を防ぎつつ、柔軟な対応が可能です。
この記事では、Pythonの例外処理の基本について、以下のポイントを解説します。
- エラーの種類
- try-except文の使い方
- finally句の役割
エラーの種類
Pythonのエラーには大きく分けて次の2つがあります。
種類 | 内容 |
---|---|
構文エラー | 文法ミスによるエラー(実行前に検出) |
例外(Exception) | 実行中に発生するエラー |
構文エラーの例
print("Hello" # 閉じカッコがないため構文エラー
実行結果:
SyntaxError: '(' was never closed
構文エラーはコードを書いている時点で検出され、プログラムは一切実行されません。
例外の例
x = 10 / 0 # ZeroDivisionError(0による除算)
実行結果:
ZeroDivisionError: division by zero
このように、プログラムが正しい構文でも、実行中に起こる問題で停止することがあります。これが「例外(Exception)」です。
try-except文の使い方
例外が発生しそうな処理は、tryブロックで囲みます。
その後に exceptブロック でエラー時の対処を記述します。
try:
num = int(input("数字を入力してください: "))
result = 10 / num
print("結果:", result)
except ZeroDivisionError:
print("0では割り算できません。")
except ValueError:
print("整数を入力してください。")
このコードでは、次の2つの例外を想定しています:
- 入力が
0
の場合 →ZeroDivisionError
- 入力が数値でない場合 →
ValueError
実行例①(0を入力した場合):
数字を入力してください: 0
0では割り算できません。
実行例②(abcを入力した場合):
数字を入力してください: abc
整数を入力してください。
実行例③(2を入力した場合):
数字を入力してください: 2
結果: 5.0
例外が発生しない場合は、tryブロック内の処理がそのまま実行されます。
finally句の役割
finally
ブロックは、エラーの有無にかかわらず 最後に必ず実行される処理 を記述します。
try:
f = open("sample.txt", "r")
content = f.read()
print(content)
except FileNotFoundError:
print("ファイルが見つかりません。")
finally:
print("処理を終了します。")
ファイルが存在する場合は内容を表示し、存在しない場合はエラーメッセージが表示されますが、
どちらでも「処理を終了します。」は必ず出力されます。
実行結果(ファイルが存在しない場合):
ファイルが見つかりません。
処理を終了します。
例外の情報を取得する
エラーの内容を詳細に記録したい場合、Exception
オブジェクトからメッセージを取得できます。
try:
1 / 0
except Exception as e:
print("エラー内容:", e)
実行結果:
エラー内容: division by zero
また、スタックトレース(エラーの発生箇所までの経緯)を表示するには、traceback
モジュールが便利です。
import traceback
try:
1 / 0
except Exception as e:
traceback.print_exc()
実行結果:
Traceback (most recent call last):
File "main.py", line 4, in <module>
1 / 0
ZeroDivisionError: division by zero
まとめ
- 構文エラー は文法ミスによるエラーで、実行前に検出されます。
- 例外(Exception) は実行中に発生する問題で、適切に対処しないとプログラムが停止します。
-
try-except
文を使えば、エラーを捕捉してユーザーに適切な対応を促すことができます。 -
finally
ブロックは、処理の後始末を確実に行う場面に有効です。 -
Exception
やtraceback
を使えば、デバッグやログ記録にも対応できます。
例外処理を理解して使いこなせば、Pythonプログラムの信頼性は格段に向上します。
Discussion