1日目のゴール
1日目のテーマは
「try / except を使って、入力エラーでアプリが落ちないようにする」 ことです。
今日のゴールはシンプルです。
ユーザーに数字を入力してもらう
間違った入力(文字など)が来ても、プログラムが落ちない
「もう一度入力してください」と優しく言える
この3つができれば、1日目は大成功です。
そもそも「エラー」とは何か
Pythonが「これは無理です」と言う瞬間
まず、エラーの正体をちゃんとイメージしましょう。
例えば、こんなコードを書きます。
age_text = input("年齢を入力してください: ")
age = int(age_text)
print(f"あなたは {age} 歳ですね。")
Pythonここで「20」と入力すれば問題ありません。
でも「二十」や「abc」と入力すると、こうなります。
ValueError: invalid literal for int() with base 10: '二十'
PythonPythonは int("二十") が理解できず、
「これは整数に変換できません」と怒ってプログラムを止めます。
これが「例外(エラー)」です。
ポイントは、
エラー自体は悪ではない
でも、何も対策しないとプログラムがそこで強制終了する
ということです。
try / except の基本形を知る
「ここでエラーが出るかも」を囲う
Pythonでエラーを「捕まえる」ための基本形はこうです。
try:
危険かもしれない処理
except エラーの種類:
エラーが起きたときにやる処理
Pythonさっきの int(age_text) を守ってあげると、こうなります。
age_text = input("年齢を入力してください: ")
try:
age = int(age_text)
print(f"あなたは {age} 歳ですね。")
except ValueError:
print("数字で入力してください。")
Pythonこれで、「二十」や「abc」と入力しても
プログラムは落ちずに、メッセージを出して続行できます。
ここで超重要なのは、
「エラーが起きそうな行だけを try の中に入れる」
という感覚です。
なんでもかんでも try の中に突っ込むのは、逆に読みにくくなります。
具体例:安全な割り算アプリ
まずは try / except なしの危険な版
次のような「割り算アプリ」を考えます。
a_text = input("割られる数を入力してください: ")
b_text = input("割る数を入力してください: ")
a = int(a_text)
b = int(b_text)
result = a / b
print(f"{a} ÷ {b} = {result}")
Pythonここには二つの危険があります。
数字以外を入れたときの ValueError
0で割ったときの ZeroDivisionError
どちらも、起きた瞬間にプログラムが落ちます。
try / except で最低限守る
まずは「落ちない」ことを最優先にします。
a_text = input("割られる数を入力してください: ")
b_text = input("割る数を入力してください: ")
try:
a = int(a_text)
b = int(b_text)
result = a / b
print(f"{a} ÷ {b} = {result}")
except ValueError:
print("数字で入力してください。")
except ZeroDivisionError:
print("0 で割ることはできません。")
Pythonここでのポイントは二つです。
ValueError と ZeroDivisionError を分けて書いている
どのエラーが起きたかによって、メッセージを変えている
これだけで、ユーザーにとってかなり親切なアプリになります。
「もう一度入力させる」までやってみる
エラーを「なかったこと」にせず、やり直しさせる
本当に使えるアプリにするには、
エラーが起きたときに「やり直し」させたいですよね。
while ループと組み合わせると、こう書けます。
while True:
a_text = input("割られる数を入力してください: ")
b_text = input("割る数を入力してください: ")
try:
a = int(a_text)
b = int(b_text)
result = a / b
except ValueError:
print("数字で入力してください。もう一度やり直します。\n")
continue
except ZeroDivisionError:
print("0 で割ることはできません。もう一度やり直します。\n")
continue
print(f"{a} ÷ {b} = {result}")
break
Pythonここで深掘りしたいのは、continue と break の使い方です。
エラーが起きたときは continue でループの先頭に戻る
成功したときだけ break でループを抜ける
これにより、
エラー → メッセージ → 再入力
成功 → 結果表示 → 終了
という自然な流れが作れます。
except を「雑に」使わないことの大事さ
except: だけで全部捕まえるのは危険
Pythonでは、こう書くこともできます。
try:
危険な処理
except:
print("何かエラーが起きました。")
Pythonこれは「どんなエラーでも全部ここで捕まえる」という意味です。
一見便利そうですが、初心者ほどこれは避けた方がいいです。
理由はシンプルで、
本来気づくべきバグまで飲み込んでしまう
どこで何が起きているのか分からなくなる
からです。
1日目の結論としては、
まずは具体的なエラー名(ValueError, ZeroDivisionError など)を書く
どうしても全部捕まえたいときだけ、最後に except Exception: を使う
というスタイルを覚えておくと安全です。
1日目のミニアプリ:年齢入力+エラーハンドリング
「落ちない入力アプリ」を完成させる
今日の学びを使って、
シンプルだけど“ちゃんとしている”入力アプリを書いてみます。
仕様はこうです。
年齢を整数で入力してもらう
数字以外なら「数字で」と言ってやり直し
0以下なら「正の数で」と言ってやり直し
正しく入力されたら「○歳ですね」と表示して終了
コードはこうなります。
def input_age():
while True:
age_text = input("年齢を入力してください: ")
try:
age = int(age_text)
except ValueError:
print("数字で入力してください。\n")
continue
if age <= 0:
print("0より大きい数を入力してください。\n")
continue
return age
def main():
age = input_age()
print(f"あなたは {age} 歳ですね。")
main()
Pythonここでの重要ポイントは三つです。
try / except は「型変換が失敗するかもしれない場所」にだけかけている
「値としておかしい」(0以下など)は if でチェックしている
入力ロジックを input_age という関数に分けている
この分け方を覚えると、
「エラー処理がごちゃごちゃして読めないコード」から
一気に卒業できます。
1日目で絶対に押さえてほしい本質
try / except は「エラーを隠す道具」ではない
今日いちばん伝えたいのは、
try / except は
エラーをなかったことにするためではなく、
エラーが起きたときに「どう振る舞うか」を決めるための仕組み
だということです。
どこでエラーが起きうるかを想像する
そのときユーザーに何を伝えるかを決める
必要なら、やり直しの流れを作る
この3つを意識して書けるようになれば、
あなたのコードはもう「初心者の壁」を一枚超えています。
2日目以降は、
複数の入力項目
関数化された入力処理
JSON保存アプリとの組み合わせ
などに try / except を広げていきます。
「どこに try を置くか」を意識しながら、
今日のミニアプリを自分なりに改造してみてください。


