ValueError:Python 中以 10 为底的 int() 的无效文字

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().

python valueerror invalid literal for int with base 10

以下是错误发生方式的 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 为底的值(其中每个数字可以有一个整数值,范围从到0910 种可能性)。

主程序
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()解析示例中的字符串没有任何问题,因为:

  1. 它不是浮点数。
  2. 它不包含非数字字符(例如符号、字母或特殊字符)。

处理包含非数字字符的字符串

当您将包含非数字字符的字符串传递给类时,通常会出现该错误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)

将无效字符串转换为 int

但是,如中所示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 来处理错误

代码示例使用一条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'>
主程序
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 个字符,否则
返回TrueFalse

我们基本上检查字符串中的每个字符是否是数字,返回结果并将数字连接成一个字符串,然后再使用该类int()获取整数值。

何时调用int()float()

  1. int()可以使用整数的字符串表示形式调用该类。
主程序
my_str = '12345' my_int = int(my_str) print(my_int) # 👉️ 12345
  1. float()可以使用浮点数的字符串表示形式调用该类。
主程序
my_str = '123.45' my_float = float(my_str) print(my_float) # 👉️ 123.45
  1. float()可以使用整数的字符串表示形式调用该类。
主程序
my_str = '12345' my_float = float(my_str) print(my_float) # 👉️ 12345.0
  1. int()可以使用浮点数调用该类。
主程序
my_float = 123.99 my_int = int(my_float) print(my_int) # 👉️ 123
  1. 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”错误:

  1. 仅将不包含任何非数字字符的字符串传递给类int()
  2. 将浮点数字符串转换为整数时,float()在调用之前使用该类。int()
  3. 确保字符串不为空或仅包含空格。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: