Code Fix

中級

ValueError: invalid literal for int() with base 10 の原因と直し方

int()に数字以外の文字を含む文字列を渡したときに出るエラーです。小数点表記や空文字列も変換できません。

エラーメッセージの読み方

Traceback (most recent call last):
main.py
ファイル名
1
行番号 — 実際にクラッシュした行
<module>
発生場所 — <module> ならトップレベル、関数名ならその関数の中
ValueError
例外クラス — 何が起きたか。ここを検索するのが最短です
invalid literal for int() with base 10: 'twenty'
詳細メッセージ — どの値が問題だったか

このエラーが出る典型パターン

パターン1

 1  age = int("twenty")
                  ^
 2  print(age)
Traceback (most recent call last): File "main.py", line 1, in <module> age = int("twenty") ^^^^^^^^^^^^^ ValueError: invalid literal for int() with base 10: 'twenty'

int()は数字だけで構成された文字列しか変換できません。英単語や記号が混ざっているとValueErrorになります。

直し方: "twenty""20" にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  price = int("19.99")
                   ^
 2  print(price)
Traceback (most recent call last): File "main.py", line 1, in <module> price = int("19.99") ^^^^^^^^^^^^ ValueError: invalid literal for int() with base 10: '19.99'

小数点を含む文字列はint()では変換できません。一度float()で変換してからint()にするか、整数部分だけの文字列にします。

直し方: "19.99""19" にします。

この問題を解いてみる →

パターン3

 1  count = int(""  )
                  ^
 2  print(count)
Traceback (most recent call last): File "main.py", line 1, in <module> count = int("") ^^^^^^^ ValueError: invalid literal for int() with base 10: ''

空文字列も数値として解釈できないためValueErrorになります。input()の戻り値をそのまま変換する際に起きやすいです。

直し方: """0" にします。

この問題を解いてみる →

よくある誤解

「数字っぽく見える文字列」でも通るとは限りません。小数点付きの文字列("19.99")はint()では変換できず、float()を経由する必要があります。

まとめ

ValueError: invalid literal for int() with base 10は中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)