ValueError: invalid literal for int() with base 10: 'abc'

Last Updated on 2025年7月17日

概要

Pythonを使っていると、ValueError: invalid literal for int() with base 10というエラーに遭遇することがあります。これは、int()関数を使って文字列などを整数に変換しようとした際に、変換できない値を渡してしまった場合に発生します。初心者にとっては特に戸惑いやすいエラーですが、原因と対処法を理解しておけばすぐに解決できます。この記事では、エラーの詳細とその原因、実際の対処法、そして補足情報を含めて、詳しく解説していきます。

目次

エラー内容

このエラーは、以下のようなコードを書いたときに発生します。

このコードを実行すると、次のようなエラーメッセージが表示されます。

このメッセージの意味は、「'abc'という文字列は10進数の整数として正しくない」ということです。int()関数は、文字列を整数に変換する際に、文字列が正しく数値形式でなければ例外(エラー)を出します。

原因

このエラーが発生する主な原因は、int()に渡した値が「10進数として解釈できない文字列」であることです。たとえば以下のようなケースが該当します。

  • 文字列にアルファベットが含まれている(例:"abc"
  • 空文字列(""
  • 数値のように見えても全角文字(例:"123"
  • 先頭または末尾に空白文字や記号がある(例:" 123", "123\n"

対処法

このエラーに対処するためには、以下のようなステップで問題を特定し、修正します。

1. 入力値を確認する

まず、int()に渡している値が何かを確認しましょう。print()を使うとデバッグがしやすくなります。

2. 数値に変換できる値かを事前にチェックする

以下のように、文字列が整数に変換できるかを確認する関数を作っておくと安全です。

3. 入力値をクリーニングする

ユーザー入力やファイル読み込み時に不要な空白や記号が混入していることがあります。strip()で前後の空白を削除し、replace()で不要な記号を除去するなど、整形を行ってからint変換を行うと安全です。

4. 正規表現で数値形式を検査する

厳密に整数形式のみ許可したい場合は、reモジュールを使用する方法もあります。

補足

int()関数には、第2引数で基数(base)を指定できます。通常は10進数(base 10)で使いますが、例えば16進数や2進数に変換する場合は次のように指定します。

この場合も、基数に適さない文字が含まれているとValueErrorが発生します。たとえば以下のようなコードはエラーになります。

また、int()で数値に変換するよりも、float()で小数点対応の変換を行ったほうが適切なケースもあります。

まとめ

  • ValueError: invalid literal for int() with base 10は、int関数に不正な文字列を渡したときに発生する
  • 文字列が数値形式であるかを事前にチェックすると安全
  • 空白や記号を除去するなど、入力値の整形も大切
  • 正規表現で数値判定を行うとより厳密な検証が可能
  • 必要に応じてfloat()の使用も検討

Pythonでは、エラーの意味を正確に理解することで、効率的なデバッグが可能になります。ValueErrorはよくあるミスですが、事前チェックや例外処理で十分に対策可能です。