AI AIワークナビ AI Work Studio
メニュー
AIワークナビ ホーム

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() だけでは abc3.14 は直りません。変換できない可能性を try/except で扱うことが重要です。

実行結果

標準入力が abc3.14、空入力の場合は、エラーで停止せず次の1行を表示します。

整数を入力してください

標準入力が 42 の場合は、次の結果になります。

入力した整数: 42

ローカルのPython 3.14.2と公開中AI Work StudioのPython実行画面で同じコードを確認しました。空入力で発生する例外名は環境により異なりますが、修正後は abc3.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で試す手順

  1. AI Work Studioを開き、Pythonタブを選びます。
  2. 修正前コードを貼り、表示方法をConsoleへ切り替えます。
  3. 標準入力欄へ abc を入れ、「Pythonを実行」を押します。
  4. Consoleで ValueError: invalid literal for int() with base 10: 'abc' を確認します。
  5. 修正後コードへ置き換え、abc3.14、空入力、42 の順に実行します。
  6. 前の3ケースは 整数を入力してください42入力した整数: 42 になれば成功です。

Pythonでは結果をConsoleで確認します。Previewに表示がなくても問題ありません。

まとめ

ValueError: invalid literal for int() は、int() に整数として読めない文字列を渡したときに発生します。ブラウザ実行では空欄が EOFError になる場合もあります。try/except (ValueError, EOFError) で確認済みの失敗だけを扱い、利用者へ入力し直す案内を表示しましょう。

関連記事