并非所有参数都在字符串格式化期间转换 (Python)

并非所有参数都在字符串格式化期间转换 (Python)

Not all arguments converted during string formatting (Python)

Python“TypeError: not all arguments converted during string formatting”出现在我们使用不正确的语法格式化字符串或使用%带有字符串和数字的运算符时。

要解决该错误,请对format()字符串调用该方法并为所有占位符提供值。

typeerror 在字符串格式化期间并非所有参数都已转换

下面是如何使用该方法的示例str.format()

主程序
# ✅ using str.format() correctly first = 'James' last = 'Doe' result = "His name is {0} {1}".format(first, last) print(result) # 👉️ "His name is James Doe"

str.format方法执行字符串
格式化操作。

调用该方法的字符串可以包含使用花括号指定的替换字段{}

对字符串和整数使用模运算符

%当您尝试将(modulo) 运算符与字符串和整数一起使用时,也会发生该错误。

主程序
my_str = '99' result = my_str % 5 # ⛔️ TypeError: not all arguments converted during string formatting print(result)

要解决该错误,请使用
int()类将字符串转换为整数。

主程序
my_str = '99' # ✅ convert to int result = int(my_str) % 5 print(result) # 👉️ 4

我们使用该类int()将字符串转换为整数,以便能够使用模运算符%

一旦(模)运算符两边的值%都是整数,错误就会解决。

input() 函数总是返回一个字符串

请注意,该input()函数始终返回一个字符串,即使用户输入了一个整数。

如果您从用户那里获取输入,请确保使用该类int()将值转换为整数。

主程序
# ✅ convert value to integer with int() num = int(input('Enter your fav number: ')) print(num) # 👉️ 10 print(type(num)) # 👉️ <class 'int'>

str.format()正确使用方法

如果在格式化字符串时出现错误,请确保每个替换字段包含位置参数的数字索引或关键字参数的名称。

主程序
first = 'James' last = 'Doe' result = "His name is {f} {l}".format(f=first, l=last) print(result) # 👉️ "His name is James Doe"

该示例使用关键字参数而不是位置参数。

确保为该format() 方法提供的参数与字符串中的替换字段一样多。

如果您决定将位置参数与数字索引一起使用,请确保从 开始0,例如{0},因为索引在 Python 中是从零开始的。

主程序
first = 'James' last = 'Doe' result = "His name is {0} {1}".format(first, last) print(result) # 👉️ "His name is James Doe"

使用格式化字符串文字来解决错误

或者,您可以使用
格式化字符串文字来连接字符串。

主程序
first = 'Bobby' last = 'Hadz' result = f'His name is {first} {last}' print(result) # 👉️ "His name is Bobby Hadz"
格式化字符串文字 (f-strings) 让我们通过在字符串前加上f.

确保将表达式括在大括号 – 中{expression}

这应该是您的首选方法,因为格式化字符串文字是 Python 的最新补充,并提供更易于阅读的语法。

格式化字符串文字还负责自动将值转换为字符串。

主程序
name = 'Bobby' age = 30 result = f'{name} is {age} years old.' print(result) # 👉️ "Bobby is 30 years old."

如果我们使用加法 (+) 运算符,我们不必将整数转换为字符串

主程序
name = 'Bobby' age = 30 result = name + ' is ' + str(age) + ' years old.' print(result) # 👉️ "Bobby is 30 years old."

检查变量存储的类型

如果不确定变量存储的类型,请使用内置type()类。

主程序
my_str = '99' print(type(my_str)) # 👉️ <class 'str'> print(isinstance(my_str, str)) # 👉️ True my_num = 5 print(type(my_num)) # 👉️ <class 'int'> print(isinstance(my_num, int)) # 👉️ True

类型

返回对象的类型。

如果传入的对象是传入类的实例或子类,则isinstance函数返回
True

我还写了一篇关于
如何使用 f 字符串进行条件格式化的文章。

额外资源

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