ValueError
は初心者がよく陥る典型的なエラーです。最初のうちはよくであることになるので、どういったエラーなのか見ていきましょう!
ValueErrorとは?
PythonのValueError
は、関数やメソッドが引数として無効な値を受け取った場合に発生する例外です
エラー詳細例:
ValueError: invalid literal for int() with base 10: 'abc'
ValueErrorの発生する具体的なコード
1. int()関数に変換できない文字列を渡した場合
この例では、文字列"abc"
を整数に変換しようとしていますが、整数に変換できる形式ではありません。int()
関数は整数に変換できる文字列でないとエラーが発生します。
コード:
value = "abc"
try:
integer_value = int(value)
except ValueError as e:
print(f"ValueError: {e}")
実行結果:
ValueError: invalid literal for int() with base 10: 'abc'
2. float()関数に変換できない文字列を渡した場合
この例では、文字列"3.14abc"
を浮動小数点数に変換しようとしていますが、浮動小数点数に変換できる形式ではありません。float()
関数は浮動小数点数に変換できる文字列でないとエラーが発生します。
コード:
value = "3.14abc"
try:
float_value = float(value)
except ValueError as e:
print(f"ValueError: {e}")
実行結果:
ValueError: could not convert string to float: '3.14abc'
3. int()関数に進数を指定せずに変換しようとした場合
この例では、文字列"1010"
を2進数として解釈して整数に変換しようとしていますが、進数を指定していません。int()
関数は進数を指定して変換する場合、その進数に合致する文字列でないとエラーが発生します。
コード:
value = "1010"
try:
decimal_value = int(value, 2)
except ValueError as e:
print(f"ValueError: {e}")
実行結果:
ValueError: invalid literal for int() with base 2: '1010'
4. list.index()メソッドでリストに存在しない要素を検索しようとした場合
この例では、リスト[1, 2, 3, 4, 5]
から要素6
を検索しようとしていますが、リストには存在しない要素です。list.index()
メソッドは指定した要素がリスト内に存在しない場合にエラーが発生します。
コード:
my_list = [1, 2, 3, 4, 5]
try:
index = my_list.index(6)
except ValueError as e:
print(f"ValueError: {e}")
実行結果:
ValueError: 6 is not in list
5. str.index()メソッドでサブストリングが見つからない場合
この例では、文字列"Hello, world!"
からサブストリング"abc"
を検索しようとしていますが、文字列内にはそのサブストリングは存在しません。str.index()
メソッドは指定したサブストリングが文字列内に見つからない場合にエラーが発生します。
コード:
my_string = "Hello, world!"
try:
index = my_string.index("abc")
except ValueError as e:
print(f"ValueError: {e}")
実行結果:
ValueError: substring not found
解決方法
基本的にはやりたいことと、実際に起きていることが違うために生じるので、
except ValueError as e:
print(f"ValueError: {e}")
でエラーポイントを見つけたり、回避したりします。
なぜエラーになるのか見つけるためには、最後のエラーであれば、
print(my_string)
で変数の内容を確認してみるといいです。
その結果思った通りの動作が起きていないことを発見できます。