Pythonでの文字列から数値への変換
Pythonでは、文字列を数値に変換するためには主に int()
または float()
関数を使用します。
整数への変換
文字列が整数を表している場合、int()
関数を使用して文字列を整数に変換できます。
s = "123"
n = int(s)
print(n) # 出力: 123
浮動小数点数への変換
文字列が浮動小数点数を表している場合、float()
関数を使用して文字列を浮動小数点数に変換できます。
s = "123.45"
f = float(s)
print(f) # 出力: 123.45
これらの関数は、文字列が適切な形式である場合にのみ正しく動作します。つまり、int()
は文字列が整数を表し、float()
は文字列が浮動小数点数を表す場合にのみ使用できます。それ以外の場合、これらの関数はエラーを引き起こします。次のセクションでは、これらのエラーとその対処法について詳しく説明します。
変換時に遭遇するエラーとその原因
Pythonで文字列を数値に変換する際、適切な形式の文字列が与えられないとエラーが発生します。具体的には、int()
または float()
関数が適切な形式の文字列以外を受け取った場合、ValueError
が発生します。
ValueError: invalid literal for int() with base 10
以下のコードを見てみましょう。
s = "123.45"
n = int(s) # ValueError: invalid literal for int() with base 10: '123.45'
このコードでは、浮動小数点数を表す文字列 “123.45” を int()
関数に渡しています。しかし、int()
関数は整数を表す文字列しか受け付けないため、ValueError
が発生します。
ValueError: could not convert string to float
同様に、float()
関数も適切な形式の文字列以外を受け取ると ValueError
が発生します。
s = "123.45.67"
f = float(s) # ValueError: could not convert string to float: '123.45.67'
このコードでは、不適切な形式の文字列 “123.45.67” を float()
関数に渡しています。この文字列は浮動小数点数を表していないため、ValueError
が発生します。
これらのエラーは、文字列が適切な形式であることを確認することで回避できます。次のセクションでは、エラーを回避するための対処法について詳しく説明します。
エラーを回避するための対処法
Pythonで文字列を数値に変換する際のエラーを回避するための主な対処法は、文字列が適切な形式であることを確認することです。具体的には、以下のような手順を踏むことが推奨されます。
文字列の形式を確認する
文字列が整数を表す形式であるか、または浮動小数点数を表す形式であるかを確認します。これには正規表現を使用することができます。
import re
def is_int(s):
return re.match(r"^-?[0-9]+$", s) is not None
def is_float(s):
return re.match(r"^-?[0-9]+\.[0-9]+$", s) is not None
try-exceptブロックを使用する
int()
または float()
関数を呼び出す際に try-except
ブロックを使用して、ValueError
を捕捉します。これにより、エラーが発生した場合でもプログラムが停止することなく、適切な処理を行うことができます。
s = "123.45"
try:
n = int(s)
except ValueError:
print(f"Cannot convert {s} to an integer.")
try:
f = float(s)
except ValueError:
print(f"Cannot convert {s} to a float.")
これらの対処法を用いることで、Pythonで文字列を数値に変換する際のエラーを効果的に回避することができます。次のセクションでは、具体的なコード例とその説明を通じて、これらの対処法の適用を詳しく見ていきます。
具体的なコード例とその説明
以下に、Pythonで文字列を数値に変換する際のエラーを回避するための具体的なコード例とその説明を示します。
文字列の形式を確認する
以下のコードは、文字列が整数または浮動小数点数を表す形式であるかを確認する関数を定義しています。
import re
def is_int(s):
return re.match(r"^-?[0-9]+$", s) is not None
def is_float(s):
return re.match(r"^-?[0-9]+\.[0-9]+$", s) is not None
s = "123"
print(is_int(s)) # 出力: True
print(is_float(s)) # 出力: False
s = "123.45"
print(is_int(s)) # 出力: False
print(is_float(s)) # 出力: True
try-exceptブロックを使用する
以下のコードは、try-except
ブロックを使用して int()
または float()
関数からの ValueError
を捕捉し、エラーメッセージを表示する例です。
s = "123.45"
try:
n = int(s)
except ValueError:
print(f"Cannot convert {s} to an integer.") # 出力: Cannot convert 123.45 to an integer.
try:
f = float(s)
except ValueError:
print(f"Cannot convert {s} to a float.") # この行は実行されません
これらのコード例を参考に、Pythonで文字列を数値に変換する際のエラーを効果的に回避することができます。エラーを回避することで、プログラムの安定性と信頼性を向上させることができます。また、エラーメッセージを適切に処理することで、ユーザーに対するフィードバックも改善されます。これらの対処法を活用して、Pythonプログラミングのスキルをさらに向上させてください。