まず結論

invalid literal for int() は、int() が整数に変換できない文字を受け取ったときに出ます。

number = int("abc")

"abc" は整数にできないので、エラーになります。

読む目安

次のようなエラーで止まった人向けです。

ValueError: invalid literal for int() with base 10

長く見えますが、「この文字列は整数に変換できません」という意味です。

イメージで考える

int() は、数字だけのカードを通す入口のようなものです。

"123" のカードは通れます。

でも "123円""abc" のカードは、数字以外が混ざっているので入口で止まります。

エラーは「カードを確認してね」という合図だと見ると落ち着いて直せます。

input()でよく起きる

input() の結果を int() に渡すときによく出ます。

age = int(input("年齢は?"))
print(age + 1)

ここで 12 と入力すれば動きます。
でも 十二12歳 と入力すると、整数に変換できずエラーになります。

小数もそのままでは無理

int() は整数用です。

number = int("3.5")

このコードもエラーになります。
小数を扱いたいなら float() を使います。

number = float("3.5")
print(number)

空文字にも注意

何も入力せずEnterを押すと、空文字 "" になります。

number = int("")

これも整数にできないためエラーです。

読み方のコツ

ValueErrorint() が一緒に出たら、「変換しようとした文字が数字として読めなかった」と考えます。
入力値に文字、単位、小数点、途中の空白が混ざっていないか確認すると直しやすいです。

手を動かすミニ練習

int() に渡す文字を変えて、成功する場合と失敗する場合を見てみましょう。

print(int("123"))
print(int("123円"))

数字だけの文字列は変換できますが、単位が混ざると整数として読めません。