プログラムを作成する上で避けられないのが「エラー」です。エラーは初心者だけでなく、ベテランのプログラマーでも経験するものであり、これを恐れず、上手に対処することが重要です。プログラムが予期せぬ動作をしたり、実行中に停止することはよくありますが、Pythonにはエラーを管理し、プログラムの安定性を保つための強力なツールが用意されています。この章では、Pythonでのエラー処理の方法を詳しく学び、エラーに対処しやすくするためのデバッグのコツやツールについても解説します。
プログラム中で起こるエラーは、大きく分けて3種類あります。
print("Hello World" # SyntaxError: unexpected EOF while parsing
x = 10 / 0 # ZeroDivisionError: division by zero
エラーが発生した際に、プログラムがそのまま停止してしまうのを避けるために、Pythonでは try-except
文を使用します。この構文を使うことで、エラーが発生してもプログラムが途中で止まらず、適切な処理を続行できるようになります。
try-except
文は、以下のような基本的な構造を持っています:
try:
# エラーが発生するかもしれないコード
except エラーの種類:
# エラーが発生した場合に実行するコード
具体例を見てみましょう。次のコードは、ユーザーから入力された数値を使って割り算を行いますが、ユーザーが0を入力した場合にエラーが発生します。
try:
number = int(input("割りたい数字を入力してください: "))
result = 100 / number
print(f"結果は {result} です")
except ZeroDivisionError:
print("エラー: 0で割ることはできません。")
このコードでは、ZeroDivisionError
が発生した場合にエラーメッセージを表示し、プログラムが停止するのを防いでいます。
try-except
文では、複数のエラーを処理することもできます。例えば、次のコードでは ValueError
と ZeroDivisionError
の両方をキャッチします。
try:
number = int(input("割りたい数字を入力してください: "))
result = 100 / number
print(f"結果は {result} です")
except ValueError:
print("エラー: 無効な数値が入力されました。")
except ZeroDivisionError:
print("エラー: 0で割ることはできません。")
ここでは、数値以外が入力された場合の ValueError
と、0で割った際の ZeroDivisionError
の両方に対応しています。
特定のエラーを無視してプログラムを続行させたい場合、pass
キーワードを使います。例えば、ファイルが存在しない場合でも処理を続けたい場合に使えます。
try:
with open("somefile.txt", "r") as file:
data = file.read()
except FileNotFoundError:
pass
このように、エラーを処理せずプログラムを継続できますが、問題の原因がわからなくなる可能性もあるので注意が必要です。
try-except
構文には、エラーの有無にかかわらず必ず実行される finally
ブロックもあります。例えば、ファイルを開いたら必ず閉じるようにするコードは次のように書けます。
try:
file = open("somefile.txt", "r")
data = file.read()
except FileNotFoundError:
print("ファイルが見つかりませんでした。")
finally:
file.close()
print("ファイルを閉じました。")
finally
ブロックは、エラーが発生しても確実に実行されるため、リソースの開放などに役立ちます。
エラー処理だけでなく、コードに潜むバグを見つけ、修正する作業(デバッグ)もプログラミングには欠かせません。Pythonには、デバッグを効率的に行うためのツールがいくつか存在します。
最も基本的なデバッグ方法は、print
文を使ってコードの途中で変数の値やプログラムの流れを確認することです。例えば、次のようにしてどの部分で問題が発生しているかを確認できます。
def divide(a, b):
print(f"divide関数の引数: a = {a}, b = {b}")
result = a / b
print(f"結果: {result}")
return result
divide(10, 2)
divide(10, 0)
この方法はシンプルですが、コードが複雑になると大量の print
文が散らばることになり、かえって見づらくなる場合があります。
Python標準ライブラリには、強力なデバッグツールである pdb
モジュールが含まれています。pdb
を使うことで、プログラムの実行をステップごとに確認したり、特定の変数の値をリアルタイムで調べたりすることが可能です。
pdb
を使うには、デバッグしたい部分に pdb.set_trace()
を追加します。
import pdb
def divide(a, b):
pdb.set_trace() # ここでプログラムが一時停止する
result = a / b
return result
divide(10, 2)
プログラムが pdb.set_trace()
に到達すると、対話型のデバッグモードに入ります。ここでは、次のようなコマンドが使えます。
n
: 次の行に進むc
: プログラムを続行p 変数名
: 特定の変数の値を表示多くの統合開発環境(IDE)には、デバッグ用のGUIツールが組み込まれています。例えば、VS CodeやPyCharmではブレークポイントを設定し、プログラムの実行を途中で停止させ、変数の値を調べたり、一行ずつコードを実行することが可能です。これらのツールは視覚的にわかりやすく、pdb
よりも直感的に使えるため、多くのプログラマーにとって便利な選択肢です。
この章では、Pythonのエラー処理とデバッグについて詳しく学びました。エラーは避けられないものですが、適切な処理とデバッグ技術を駆使することで、エラーの影響を最小限に抑え、より安定したプログラムを作成できます。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓