ValueError:Python 中以 10 为底的 int() 的无效文字
ValueError: invalid literal for int() with base 10 in Python
Python“ValueError: invalid literal for int() with base 10”发生在我们向类传递一个不能直接转换为整数的字符串时int()
。
错误的常见原因是:
- 尝试将浮点数字符串转换为带有
int()
. - 尝试将空字符串或仅包含空格的字符串转换为整数。
- 尝试将包含非数字字符的字符串转换为
int()
.
以下是错误发生方式的 3 个示例。
# ⛔️ ValueError: invalid literal for int() with base 10: '5.0' print(int('5.0')) # ⛔️ ValueError: invalid literal for int() with base 10: '' print(int('')) # ⛔️ ValueError: print(int('a2c3'))
我们不能直接将包含浮点数的字符串传递给类int()
,因为类需要一个以 10 为底的值(其中每个数字可以有一个整数值,范围从到0
– 9
10 种可能性)。
my_str = '5.6' # ✅ Convert to float first my_float = float(my_str) my_int = int(my_float) print(my_int) # 👉️ 5 print(type(my_int)) # 👉️ <class 'int'>
错误的另一个常见原因是将包含非数字字符的字符串传递给
int() 类。
该类int()
需要一个作为有效整数的字符串。
# ✅ a string that is a valid integer my_str = '123456' my_int = int(my_str) print(my_int) # 👉️ 123456
该类int()
解析示例中的字符串没有任何问题,因为:
- 它不是浮点数。
- 它不包含非数字字符(例如符号、字母或特殊字符)。
处理包含非数字字符的字符串
当您将包含非数字字符的字符串传递给类时,通常会出现该错误int()
。
my_str = 'a2c3' # ⛔️ ValueError: invalid literal for int() with base 10: 'a2c3' print(int(my_str))
当使用该input()
函数获取用户输入时,该值总是会被转换为字符串,即使用户输入的是整数。
因此,我们必须使用该类int()
将字符串值转换为整数。
num_1 = int(input('Enter a number: ')) num_2 = int(input('Enter another number: ')) result = num_1 + num_2 print(result)
但是,如中所示gif
,如果用户输入的值不是有效整数,这可能会导致问题。
您可以使用
try/except 语句来处理错误。
try: num_1 = int(input('Enter a number: ')) num_2 = int(input('Enter another number: ')) result = num_1 + num_2 print(result) except ValueError: print('Invalid integer value supplied.')
代码示例使用一条try/except
语句来处理错误。
如果用户提供了一个无效的整数,则对该int()
类的调用将引发 a
ValueError
并运行 except 块。
错误在except
块中处理,因此它不再使程序崩溃。
如果从用户输入中获取浮点数,请使用该类float()
代替int()
。
处理包裹在字符串中的浮点数
如果您的字符串是有效的浮点数,请在将字符串传递给类之前将其转换为浮点数int()
。
my_str = '5.6' my_float = float(my_str) my_int = int(my_float) print(my_int) # 👉️ 5 print(type(my_int)) # 👉️ <class 'int'>
该类float()
负责将字符串转换为浮点数,该类int()
将浮点数转换为整数。
当浮点数传递给int()
类时,它会被截断。
如果需要将浮点数舍入为整数,请使用:
round()
函数四舍五入到最接近的整数。
my_str = '5.6' my_int = round(float(my_str)) print(my_int) # 👉️ 6 print(type(my_int)) # 👉️ <class 'int'>
- math.ceil()
方法向上舍入到最接近的整数。
import math my_str = '5.1' my_int = math.ceil(float(my_str)) print(my_int) # 👉️ 6 print(type(my_int)) # 👉️ <class 'int'>
- math.floor()方法向下舍入到最接近的整数。
import math my_str = '5.999' my_int = math.floor(float(my_str)) print(my_int) # 👉️ 5 print(type(my_int)) # 👉️ <class 'int'>
处理空字符串
确保print()您传递给类的值,int
因为它可能不包含您期望的值。
例如,您可能将空字符串或包含空格的字符串传递给类int()
。
val = ' ' result = int(val.strip() or 0) print(result) # 👉️ 0
str.strip方法返回删除了前导和尾随空格的字符串副本。
如果从字符串中删除所有前导和尾随空格返回一个空字符串,我们将传递0
给该类int()
。
或者,您可以使用if/else
语句在将字符串传递给之前检查字符串是否为空int()
。
my_str = ' ' if my_str.strip(): my_int = int(my_str) else: # 👇️ this runs print('The specified string is empty')
示例中的字符串只包含空格,因此它没有通过if
语句中的测试,并且int()
永远不会调用该类。
使用try/except
语句来处理错误
您还可以使用try/except
块来处理错误。
val = 'abc' try: result = int(val) except ValueError: result = 0 print(result) # 👉️ 0
如果调用int()
带有值的类引发 a ValueError
,则该except
块将在我们将result
变量设置为 的位置运行0
。
只从字符串中提取整数
如果你有一个可能也包含字符但你只需要提取一个整数的字符串,使用函数filter()
来过滤掉所有非数字。
my_str = 'a40b' my_num_1 = int(''.join(filter(str.isdigit, my_str))) print(my_num_1) # 👉️ 40
filter函数接受一个函数和一个可迭代对象作为参数,并从可迭代对象的元素构造一个迭代器,函数返回一个真值。
str.isdigit方法返回
如果字符串中的所有字符都是数字并且至少有 1 个字符,否则返回。True
False
我们基本上检查字符串中的每个字符是否是数字,返回结果并将数字连接成一个字符串,然后再使用该类int()
获取整数值。
何时调用int()
和float()
类
int()
可以使用整数的字符串表示形式调用该类。
my_str = '12345' my_int = int(my_str) print(my_int) # 👉️ 12345
float()
可以使用浮点数的字符串表示形式调用该类。
my_str = '123.45' my_float = float(my_str) print(my_float) # 👉️ 123.45
float()
可以使用整数的字符串表示形式调用该类。
my_str = '12345' my_float = float(my_str) print(my_float) # 👉️ 12345.0
int()
可以使用浮点数调用该类。
my_float = 123.99 my_int = int(my_float) print(my_int) # 👉️ 123
float()
可以用整数调用该类。
my_int = 1234 my_float = int(my_int) print(my_float) # 👉️ 1234
int()
这些是您可以在 Python 中对和类进行的唯一有效调用float()
。
结论
要解决 Python“ValueError:invalid literal for int() with base 10”错误:
- 仅将不包含任何非数字字符的字符串传递给类
int()
。 - 将浮点数字符串转换为整数时,
float()
在调用之前使用该类。int()
- 确保字符串不为空或仅包含空格。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: