Pythonでよく発生するエラー「invalid literal for int() with base 10」の原因と解決方法について解説します。このエラーは文字列を整数に変換しようとする際によく発生します。

エラーの例

text = "123.45"
number = int(text)  # ValueError: invalid literal for int() with base 10

エラーが発生する主な原因

1. 小数点を含む文字列

2. 空白を含む文字列

3. 数字以外の文字を含む文字列

4. 空の文字列

解決方法

1. 小数点を含む文字列の場合

# 方法1: floatを経由して変換
text = "123.45"
number = int(float(text))  # 123

# 方法2: 小数点以下を切り捨てる
text = "123.45"
number = int(text.split('.')[0])  # 123

2. 空白を含む文字列の場合

# stripで空白を除去
text = " 123 "
number = int(text.strip())  # 123

3. 数字以外の文字を含む場合

# 数字以外を除去
text = "123abc"
number = int(''.join(filter(str.isdigit, text)))  # 123

4. エラー処理を追加する

# try-exceptでエラーをハンドリング
text = "invalid"
try:
    number = int(text)
except ValueError:
    print("数値に変換できません")
    number = 0  # デフォルト値を設定

int()関数の基本的な使い方

# 基本的な使用方法
number = int("123")  # 123

# 2進数の変換
binary = int("1010", 2)  # 10

# 16進数の変換
hex_num = int("1A", 16)  # 26

実践的なサンプルコード

def safe_int_conversion(value, default=0):
    """安全に整数変換を行う関数"""
    try:
        if isinstance(value, str):
            value = value.strip()
        return int(float(value)) if '.' in str(value) else int(value)
    except (ValueError, TypeError):
        return default

# 使用例
print(safe_int_conversion("123"))      # 123
print(safe_int_conversion("123.45"))   # 123
print(safe_int_conversion("invalid"))  # 0

このように、int()関数を使用する際は入力値の形式に応じて適切な前処理を行うことが重要です。また、エラー処理を実装することで、プログラムの堅牢性を高めることができます。

注意点

  • int()関数は小数点を含む文字列を直接変換できません
  • 負の数の文字列("-123")は正しく変換できます
  • 科学的記数法の文字列は直接変換できません

int()関数を適切に使用することで、文字列から整数への変換を安全かつ効率的に行うことができます。エラーが発生した場合は、上記の解決方法を参考に適切な対処を行ってください。