Python TypeError:在字符串格式化过程中并非所有参数都已转换
程序应该接受两个名称,如果它们的长度相同,它应该检查它们是否是相同的单词。如果是同一个单词,它将打印“名称相同”。如果它们长度相同但字母不同,则会打印“名称不同但长度相同”。我遇到问题的部分在最后4行Python TypeError:在字符串格式化过程中并非所有参数都已转换,python,string,python-3.x,typeerror,output-formatting,Python,String,Python 3.x,Typeerror,Output Formatting,程序应该接受两个名称,如果它们的长度相同,它应该检查它们是否是相同的单词。如果是同一个单词,它将打印“名称相同”。如果它们长度相同但字母不同,则会打印“名称不同但长度相同”。我遇到问题的部分在最后4行 #!/usr/bin/env python # Enter your code for "What's In (The Length Of) A Name?" here. name1 = input("Enter name 1: ") name2 = input("Enter name 2: ")
#!/usr/bin/env python
# Enter your code for "What's In (The Length Of) A Name?" here.
name1 = input("Enter name 1: ")
name2 = input("Enter name 2: ")
len(name1)
len(name2)
if len(name1) == len(name2):
if name1 == name2:
print ("The names are the same")
else:
print ("The names are different, but are the same length")
if len(name1) > len(name2):
print ("'{0}' is longer than '{1}'"% name1, name2)
elif len(name1) < len(name2):
print ("'{0}'is longer than '{1}'"% name2, name1)
#/usr/bin/env python
#在此处输入“姓名(长度)是多少?”的代码。
名称1=输入(“输入名称1:”)
名称2=输入(“输入名称2:”)
莱恩(姓名1)
莱恩(姓名2)
如果len(name1)=len(name2):
如果name1==name2:
打印(“名称相同”)
其他:
打印(“名称不同,但长度相同”)
如果len(名称1)>len(名称2):
打印(“{0}”比“{1}”长%name1,name2)
elif len(名称1)
当我运行此代码时,它显示:
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
回溯(最近一次呼叫最后一次):
文件“program.py”,第13行,在
打印(“{0}”比“{1}”长%name1,name2)
TypeError:在字符串格式化过程中并非所有参数都已转换
非常感谢您的建议。您正在混合不同的格式函数 旧式
%
格式使用%
代码进行格式设置:
'It will cost $%d dollars.' % 95
新样式的{}
格式使用{}
代码和.format
方法
'It will cost ${0} dollars.'.format(95)
请注意,对于旧式格式,必须使用元组指定多个参数:
'%d days and %d nights' % (40, 40)
在您的情况下,因为您使用的是
{}
格式说明符,所以请使用.format
:
"'{0}' is longer than '{1}'".format(name1, name2)
错误在字符串格式中 使用“%”运算符使用传统字符串格式的正确方法是使用printf样式的格式字符串(此处的Python文档:): 但是,“%”运算符无效。新的做事方式是这样的:
"'{0}' is longer than '{1}'".format(name1, name2)
除了另外两个答案之外,我认为在最后两个条件中,缩进也是不正确的。 条件是一个名称比另一个长,并且它们需要以“elif”开头,并且没有缩进。如果你把它放在第一个条件中(从页边空白处给它四个缩进),它最终会产生矛盾,因为名称的长度不能同时相等和不同
else:
print ("The names are different, but are the same length")
elif len(name1) > len(name2):
print ("{0} is longer than {1}".format(name1, name2))
对我来说,这个错误是在我试图将元组传递到字符串格式方法时引起的 复制并粘贴链接中的正确答案(不是我的作品):
>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)
将感兴趣的元组作为唯一项生成单元组,
i、 (双倍)部分是这里的关键部分
在我的例子中,这是因为我只需要一个
%s
,我缺少值输入。我也遇到了错误
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting
但是列表args工作得很好
我使用mysqlclient python库。该库似乎不接受元组参数。要通过列表arg,例如
['arg1','arg2']
将起作用。正如其他一些答案中所指出的,存在一系列问题
name1=输入(“输入名称1:”)
名称2=输入(“输入名称2:”)
莱恩(姓名1)
莱恩(姓名2)
如果len(name1)=len(name2):
如果name1==name2:
打印(“名称相同”)
其他:
打印(“名称不同,但长度相同”)
elif len(名称1)>len(名称2):
打印({0}比{1}长)。格式(name1,name2))
elif len(名称1)
使用%s和元组设置字符串格式
name1=输入(“输入名称1:”)
名称2=输入(“输入名称2:”)
莱恩(姓名1)
莱恩(姓名2)
如果len(name1)=len(name2):
如果name1==name2:
打印(“名称相同”)
其他:
打印(“名称不同,但长度相同”)
elif len(名称1)>len(名称2):
打印(“%s”长于“%s”%(名称1,名称2))
elif len(名称1)
视图中的django原始sql查询
"SELECT * FROM VendorReport_vehicledamage WHERE requestdate BETWEEN '{0}' AND '{1}'".format(date_from, date_to)
models.py
views.py
注意:使用Python3.5和django 1.11
在Python3.7及更高版本中,有一种新的简单方法。以下是语法:
name = "Eric"
age = 74
f"Hello, {name}. You are {age}."
输出:
Hello, Eric. You are 74.
对我来说,由于我在一个print调用中存储了许多值,所以解决方案是创建一个单独的变量来将数据存储为元组,然后调用print函数
x = (f"{id}", f"{name}", f"{age}")
print(x)
将字符串数字类型转换为整数的最简单方法
number=89
number=int(89)
请记住,此错误也可能是由于忘记引用变量而导致的
"this is a comment" % comment #ERROR
而不是
"this is a comment: %s" % comment
scnr:“将来可能会被弃用”到目前为止还没有发生(Python 3.5)。旧的“%”语法在中没有被弃用,仅在3.2中被弃用。突然,3.5带来了。这让我觉得
%
将在很长一段时间内保留。%
更简洁。很高兴它一直伴随着我们。我同意更简洁,删除不会给语言带来任何好处。@LenarHoyt您觉得f字符串怎么样?我无法想象这是“'%s'比'%s'”(name1,name2)
比f更简洁“{name1}”比{name2}”长
我完全支持f-string,但它们太新了,不能在一年以上的项目中使用它们。我宁愿使用以下语句之一将元组转换为字符串:print(“这是一个元组:%s”
Hello, Eric. You are 74.
x = (f"{id}", f"{name}", f"{age}")
print(x)
number=89
number=int(89)
"this is a comment" % comment #ERROR
"this is a comment: %s" % comment