我有一些代码将从用户那里读取两个字符串:
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
稍后,我想将这些字符串格式化为更长的字符串以进行打印:
if len(name1) > len(name2):
print ("'{0}' is longer than '{1}'"% name1, name2)
但我得到一个错误消息,看起来像:
Traceback (most recent call last):
File "program.py", line 13, in <module>
print ("'{0}' is longer than '{1}'"% name1, name2)
TypeError: not all arguments converted during string formatting
这段代码有什么问题?我应该怎么写这一行,才能正确地格式化字符串?
另请参阅String formatting: % vs. .format vs. f-string literal以深入比较最常见的字符串格式化方法,以及How do I put a variable’s value inside a string (interpolate it into the string)?以了解这种字符串构造的一般操作指南。请参阅Printing tuple with string formatting in Python以了解另一个常见的错误原因。
9条答案
按热度按时间lstz6jyr1#
旧式
%
使用%
代码进行格式设置:新的
{}
使用{}
代码和.format
方法。确保不要混合和匹配-如果“模板”字符串包含{}
占位符,则调用.format
,不要使用%
。6tqwzwtp2#
使用'%'运算符的传统字符串格式的正确方法是使用printf样式的格式字符串(此处的Python文档:http://docs.python.org/2/library/string.html#format-string-syntax):
但是,'%'运算符will probably be deprecated in the future。新的PEP 3101操作方式如下所示:
xtfmy6hx3#
当trying to format a single value into the string using
%
, if the value is a tuple时也会导致此错误。正如Alex Martelli的回答所示:
创建一个单例元组,其中只包含感兴趣的元组,即
(thetuple,)
部分,这是这里的关键。wqsoz72f4#
请记住,忘记引用变量也可能导致此错误
而不是
50pmv0ei5#
除了其他两个答案,我认为缩进在最后两个条件中也是不正确的。条件是一个名字比另一个长,他们需要以'elif'开头,并且没有缩进。如果你把它放在第一个条件内(通过从边缘给予它四个凹痕),它最终是矛盾的,因为名称的长度不能同时相等和不同。
hpcdzsge6#
在python 3.7及更高版本中,有一种新的简单方法。它被称为f-strings。下面是语法:
输出:
mftmpeh87#
对我来说,由于我在一个print调用中存储了许多值,解决方案是创建一个单独的变量来将数据存储为元组,然后调用print函数。
nhjlsmyf8#
最简单的方法将字符串数字类型转换为整数
gab6jxml9#
我也遇到了错误,
但是list args工作得很好。
我使用mysqlclient python库。库看起来不接受元组参数。传递列表参数,如
['arg1', 'arg2']
将工作。