PythonのValueError: invalid literal for int()を直す|整数に変換できない原因
Pythonで入力された数字を計算に使おうとしたとき、ValueError: invalid literal for int() with base 10 と表示されることがあります。これは、int() に整数として読めない文字列を渡したことが原因です。この記事では abc、空入力、小数を試し、整数を安全に受け取る方法を確認します。
結論
入力内容が必ず整数とは限らない場合は、input() と int() を try の中で実行し、ValueError を処理します。ブラウザ実行で標準入力が空のときに備え、EOFError も同時に扱います。
try:
raw = input().strip()
number = int(raw)
except (ValueError, EOFError):
print("整数を入力してください")
else:
print("入力した整数:", number)
発生している問題
標準入力から受け取った値を、そのまま整数へ変換するコードを考えます。
修正前コード
number = int(input())
print("入力した整数:", number)
標準入力に abc を入れて実行すると、処理は1行目で止まり、最後に次のエラーが表示されます。
ValueError: invalid literal for int() with base 10: 'abc'
3.14 を入れた場合は末尾が '3.14' となり、同じ種類のValueErrorが発生しました。ローカルで空行を渡すと末尾が '' のValueErrorになります。一方、AI Work Studioで標準入力欄を空にすると、読み取る行がないため EOFError: EOF when reading a line になりました。
原因
input() が返す値は文字列です。int() は、文字列を受け取った場合、その内容が整数を表す形式なら整数へ変換します。42 や -5 は変換できますが、英字を含む abc、空文字、小数点を含む 3.14 は10進整数を表す文字列ではありません。
エラー文の base 10 は、10進数として変換しようとしたことを示します。invalid literal は、渡された文字列がその形式として無効だったという手掛かりです。Python公式ドキュメントでも、int() に文字列を渡す場合は整数を表す文字列である必要があり、ValueError は値が適切でないときに使われる例外として説明されています。
修正後コード
input() から整数変換までを try で囲みます。整数へ変換できない場合は ValueError、AI Work Studioの空欄のように読み取る行がない場合は EOFError です。タプルで2つを指定し、どちらも同じ案内へまとめます。
try:
raw = input().strip()
number = int(raw)
except (ValueError, EOFError):
print("整数を入力してください")
else:
print("入力した整数:", number)
strip() だけでは abc や 3.14 は直りません。変換できない可能性を try/except で扱うことが重要です。
実行結果
標準入力が abc、3.14、空入力の場合は、エラーで停止せず次の1行を表示します。
整数を入力してください
標準入力が 42 の場合は、次の結果になります。
入力した整数: 42
ローカルのPython 3.14.2と公開中AI Work StudioのPython実行画面で同じコードを確認しました。空入力で発生する例外名は環境により異なりますが、修正後は abc、3.14、空入力、42 の4ケースで表示結果が一致しました。Previewは表示内容なし、結果はConsole、入力値は標準入力欄で確認しました。
よくある間違い
strip()だけで直そうとする
strip() は前後の空白を取り除きますが、英字や小数点を整数へ変える機能ではありません。空白を整理した後でも、int() の失敗は別に処理します。
int(float(raw))へ置き換える
int(float("3.14")) は 3 になりますが、小数部分を切り捨てるため、利用者の意図と違う値になる可能性があります。整数だけを受け付ける画面なら、無理に変換せず入力し直してもらう方が安全です。
exceptだけを書く
例外名を書かない except: は、入力変換とは関係のない問題まで隠します。今回は確認済みの2種類だけを扱うため、except (ValueError, EOFError): と対象を限定します。
AI Work Studioで試す手順
- AI Work Studioを開き、Pythonタブを選びます。
- 修正前コードを貼り、表示方法をConsoleへ切り替えます。
- 標準入力欄へ
abcを入れ、「Pythonを実行」を押します。 - Consoleで
ValueError: invalid literal for int() with base 10: 'abc'を確認します。 - 修正後コードへ置き換え、
abc、3.14、空入力、42の順に実行します。 - 前の3ケースは
整数を入力してください、42は入力した整数: 42になれば成功です。
Pythonでは結果をConsoleで確認します。Previewに表示がなくても問題ありません。
まとめ
ValueError: invalid literal for int() は、int() に整数として読めない文字列を渡したときに発生します。ブラウザ実行では空欄が EOFError になる場合もあります。try/except (ValueError, EOFError) で確認済みの失敗だけを扱い、利用者へ入力し直す案内を表示しましょう。