Pythonの基礎知識(基礎編)

【Pythonの基礎知識】try-exceptで学ぶPythonの例外処理

Pythonを学んでいく中で、必ず直面するのが「エラー処理」です。特に例外処理の基本であるtry-except構文は、プログラムを安全に実行するために欠かせません。この記事では、初心者がつまずきやすいポイントを中心に、例外処理の考え方と正しい使い方を整理します。

エラー処理とは?なぜ必要なのか

コードは必ず「うまくいかない場面」に遭遇します。例外処理は、それに備えてプログラムの安定性を保つ手段です。

文法エラーと実行時エラーの違い

Pythonでは、プログラムの実行前に発見される文法エラー(SyntaxError)と、実行中に発生する実行時エラー(RuntimeError)があります。

文法エラーはインタプリタによって即座に検出されますが、実行時エラーはコードが動作して初めて顕在化します。

Pythonの例外(Exception)とは何か

実行中に発生するエラーの多くは「例外(Exception)」としてPythonに内包されています。代表的な例外には次のようなものがあります:

  • ZeroDivisionError:ゼロによる除算
  • TypeError:型が合わない操作
  • FileNotFoundError:ファイルが存在しない

これらはすべて、Pythonの組み込み例外クラスとして定義されており、try-exceptで捕捉できます。

例外が起きるとプログラムはどうなる?

例外が発生しても適切に捕捉されていない場合、プログラムはその場で強制終了します。

一方で、 try-exceptを使って明示的に処理を分けておけば、「エラーがあっても落ちない」プログラムを実現できます。

try-except構文の基本と実行の流れ

例外処理の中心である try-except構文は、「通常処理」と「例外発生時の処理」を明確に分けて記述できます。

try-exceptの基本構文と挙動

基本的な構文は以下のとおりです。tryブロック内でエラーが発生すると、exceptブロックが実行されます。

try:
    value = int(input("数字を入力してください: "))
except ValueError:
    print("数字を入力してください。")
else:
    print("入力された数字は:", value)

エラーが発生しなければ else節が、エラーが発生した場合は except節が実行されます。

exceptで受け取るエラーの種類

Pythonのexceptでは、発生したエラーの型を指定して処理を分けることができます。

  • ValueError:int変換できない文字列など
  • ZeroDivisionError:0で割ったとき
  • TypeError:型が合わない操作

複数のエラーをまとめて処理したい場合は、カンマ区切りで指定も可能です。

try:
    処理
except (TypeError, ValueError):
    共通の処理

else, finally の使いどころと注意点

elseは「例外が発生しなかった場合のみ」実行され、 finallyは「例外の有無に関係なく必ず」実行されるブロックです。

例えばファイル処理では、 finallyを使って確実にファイルを閉じるようにします。

try:
    f = open("sample.txt", "r")
    data = f.read()
except FileNotFoundError:
    print("ファイルが見つかりません。")
finally:
    f.close()

注意:finally内で例外が発生すると、元の例外が上書きされることがあるため、注意が必要です。

補足:Pythonのtry-exceptは「else」も使える

Pythonの例外処理構文は、Javaなど他言語と異なり、try-except に else 節を追加できるという特徴があります。 これは「成功時の追加処理」や「正常系の後続処理」に使えるため、設計上の柔軟性が高まります。

try-except-else-finally の基本構成

以下のように4つの節を組み合わせることが可能です。

try:
    処理本体
except エラー種類:
    エラー発生時の処理
else:
    エラーが発生しなかった場合の処理
finally:
    必ず最後に実行する処理(例:後始末)

Javaとの構文の違い

比較項目PythonJava
try 節標準構文標準構文
except / catchexcept を使用catch を使用
else 節あり(✅)なし(❌)
finally 節ありあり
例外の種類任意指定可明示的指定が必須

設計上のメリット

Pythonの try-except-else-finally 構文を活用することで、例外処理・成功時処理・後始末を1つの流れで記述できます。 Javaで分割して書く必要があった部分も、Pythonではスマートにまとめられるのが利点です。

つまり、try節に正常系だけ、exceptに異常系だけ、elseに成功後処理だけ、finallyに後始末だけを記述できることで、「ログの条件分岐」や「二重記述」が不要になるんです。

「ログ設計を整理できる言語機能」って観点では、Pythonはかなり洗練されてます。ビープロ的にも、シェルやJavaより構造化しやすい設計思想ですね。

具体例:ゼロ除算やファイル読み込み時の例外

try-exceptは理論ではなく「実例」で覚えるのが効果的です。ここでは代表的なエラーシーンを使って学びます。

ZeroDivisionError(ゼロ除算)の対処例

ゼロで割り算をしたときに発生するエラーです。入力値をチェックしてから演算する、もしくは例外処理で回避できます。

try:
    num = int(input("割られる数を入力: "))
    result = 10 / num
    print("結果:", result)
except ZeroDivisionError:
    print("0で割ることはできません。")

FileNotFoundError(ファイルの読み込み失敗)

存在しないファイルを読み込もうとすると、このエラーが発生します。 try-exceptで処理を分けておくことで、ユーザーにわかりやすく案内できます。

try:
    with open("data.txt", "r") as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print("ファイルが見つかりません。")

実務でよくある例:型変換ミスの捕捉

ユーザーからの入力や外部データには、数値に変換できない文字列が含まれることがあります。 ValueErrorの捕捉が有効です。

try:
    age = int(input("年齢を入力してください: "))
    print("あなたの年齢は", age, "歳です")
except ValueError:
    print("数字を入力してください。")

例外処理でやってはいけないパターン

例外処理は便利な反面、使い方を間違えるとバグを見逃す温床になります。ここでは避けるべき例外処理の実例と、その理由を確認します。

exceptの条件なし捕捉(なんでも握りつぶす)

エラーの種類を特定せずにexceptだけを使うと、意図しない例外まで握りつぶしてしまいます。デバッグが困難になるため避けるべきです。

try:
    処理
except:
    print("なんらかのエラー")

→ 何が起きたか分からないままスルーしてしまう。

ログも表示もしない「無反応な例外処理」

例外が発生したのに何も出力せずにパスするのもNGです。エラーがあることすら分からず、後から原因追跡が不可能になります。

try:
    処理
except ValueError:
    pass

→ 「ログすら残らない」ので、バグ発見が遅れます。

正常処理にexceptを使ってしまうケース

そもそも発生しないはずのエラーに備えて、正常処理を tryで囲むのは設計ミスです。バグが前提のコードになってしまいます。

try:
    if user_input == "yes":
        do_something()
except:
    print("何かが起きました")

→ 本来 if文で処理を分けるべきで、 tryに頼る必要はありません。

まとめ|例外処理は「想定される異常」のためにある

エラー処理は“備える”ための技術です。書き方を覚えるだけでなく、「どこに備えるか」を考える癖を身につけましょう。次回は、ファイル操作を通じてより実務的なエラー制御に踏み込みます。

この記事を読んだら、次は「【Pythonの基礎知識】Pythonのファイル操作を完全理解」の使い方に進むのがおすすめです。

よく読まれている記事

1

IT入門シリーズ 🟢 STEP 1: ITの基礎を知る(ITとは何か?) 📌 IT初心者が最初に学ぶべき基本知識。ITの概念、ネットワーク、OS、クラウドの仕組みを学ぶ ...

2

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか?無料で使えるだけでなく、高い柔軟性 ...

3

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Pythonの基礎知識(基礎編)