MeWrite Docs

ユーザー入力を正しい値が返るまで繰り返す方法

概要

input() でユーザーから入力を受け取る際、不正な値(数値を期待しているのに文字列が入力される等)に対してエラーハンドリングし、正しい値が入力されるまで繰り返す方法。

エラーメッセージ

>>> age = int(input("年齢を入力: "))
年齢を入力: abc
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'

原因

  1. 入力値の型チェックがない: int()float() への変換前にバリデーションを行っていない
  2. ループによる再入力の仕組みがない: エラー発生時にプログラムがクラッシュし、再入力を求めない

解決策

1. while + try-exceptパターン

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
while True:
    try:
        age = int(input("年齢を入力してください: "))
        if age < 0 or age > 150:
            print("0〜150の範囲で入力してください")
            continue
        break
    except ValueError:
        print("数値を入力してください")

print(f"入力された年齢: {age}")

2. 関数化して再利用可能にする

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def get_valid_input(prompt, type_func=int, validator=None, error_msg="無効な入力です"):
    while True:
        try:
            value = type_func(input(prompt))
            if validator and not validator(value):
                print(error_msg)
                continue
            return value
        except (ValueError, TypeError):
            print(error_msg)

# 使用例
age = get_valid_input("年齢: ", int, lambda x: 0 <= x <= 150, "0〜150の数値を入力")

関連エラー

関連エラー

Python の他のエラー

最終更新: 2026-03-18