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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。