为什么会出现python连接错误?
我正在做这个教程,我遇到了这个奇怪的错误。我正在打印日期 因此,在编写示例代码之前,您需要:为什么会出现python连接错误?,python,string-concatenation,Python,String Concatenation,我正在做这个教程,我遇到了这个奇怪的错误。我正在打印日期 因此,在编写示例代码之前,您需要: from datetime import datetime now = datetime.now() 这会打印出来 print "%s" "/" "%s" "/" "%s" % (now.month, now.day, now.year) 这也会如此 print "pizza" + "pie" print "%s/%s/%s" % (now.month, now.day, now.year) 这
from datetime import datetime
now = datetime.now()
这会打印出来
print "%s" "/" "%s" "/" "%s" % (now.month, now.day, now.year)
这也会如此
print "pizza" + "pie"
print "%s/%s/%s" % (now.month, now.day, now.year)
这也会如此
print "pizza" + "pie"
print "%s/%s/%s" % (now.month, now.day, now.year)
但当我介绍串联运算符时:
#Traceback (most recent call last):
# File "python", line 4, in <module>
#TypeError: not all arguments converted during string formatting
print "%s" + "/" + "%s" + "/" + "%s" % (now.month, now.day, now.year)
#回溯(最近一次呼叫最后一次):
#文件“python”,第4行,在
#TypeError:在字符串格式化过程中并非所有参数都已转换
打印“%s”+“/”+“%s”+“/”+“%s”%(now.month,now.day,now.year)
这是某种连接问题。我不明白的是,当我连接其他字符串时,以及当我不使用所需字符串的连接时,代码将打印出来。因为:
print "%s" + "/" + "%s" + "/" + "%s" % (now.month, now.day, now.year)
与此相同,原因是(注意额外的括号)
因为:
print "%s" + "/" + "%s" + "/" + "%s" % (now.month, now.day, now.year)
与此相同,原因是(注意额外的括号)
您遇到的问题是由运算符优先级引起的 下一行之所以有效,是因为它的优先级高于
%
运算符
print "%s" "/" "%s" "/" "%s" % (now.month, now.day, now.year)
print "%s" + "/" + "%s" + "/" + "%s" % (now.month, now.day, now.year)
以下操作不起作用,因为+
运算符的优先级低于%
运算符
print "%s" "/" "%s" "/" "%s" % (now.month, now.day, now.year)
print "%s" + "/" + "%s" + "/" + "%s" % (now.month, now.day, now.year)
要修复此问题,请在连接中添加括号,以便首先执行连接,如下所示:
print ("%s" + "/" + "%s" + "/" + "%s") % (now.month, now.day, now.year)
您遇到的问题是由运算符优先级引起的 下一行之所以有效,是因为它的优先级高于
%
运算符
print "%s" "/" "%s" "/" "%s" % (now.month, now.day, now.year)
print "%s" + "/" + "%s" + "/" + "%s" % (now.month, now.day, now.year)
以下操作不起作用,因为+
运算符的优先级低于%
运算符
print "%s" "/" "%s" "/" "%s" % (now.month, now.day, now.year)
print "%s" + "/" + "%s" + "/" + "%s" % (now.month, now.day, now.year)
要修复此问题,请在连接中添加括号,以便首先执行连接,如下所示:
print ("%s" + "/" + "%s" + "/" + "%s") % (now.month, now.day, now.year)
因为它试图将您的所有值格式化为最后的
“%s”
。您需要将字符串构建包装在parens中。这是一个简单的运算符优先级问题,因为它试图将您的所有值格式化为最后的“%s”
。你需要用parens来包装字符串构建。这是一个简单的运算符优先的问题,我没有遵循。是不是正是加分把它扔掉了,加法有更高的优先级?这不也应该取消打印“%s”“/”“%s”“/”“%s”“%(now.month、now.day、now.year),因为假定它们是串联的吗?你能再解释一点吗?仔细想想,我现在明白了。空格实际上并没有将这些字符串连接在一起,它只是将这些字符串相邻地打印出来。加法符号和百分号一样,起着运算符的作用,混淆了所有的顺序。我不明白。是不是正是加分把它扔掉了,加法有更高的优先级?这不也应该取消打印“%s”“/”“%s”“/”“%s”“%(now.month、now.day、now.year),因为假定它们是串联的吗?你能再解释一点吗?仔细想想,我现在明白了。空格实际上并没有将这些字符串连接在一起,它只是将这些字符串相邻地打印出来。加法符号和百分号一样,起着运算符的作用,混淆了所有符号的顺序。我之所以选择这个符号,是因为解释更加透彻,尽管第一个答案帮助我理解了它,尽管我自己花了一段时间看它。当我有加1的能力时,我会加1第一个答案。我选择这个答案是因为解释更彻底,虽然第一个答案帮助我得到了它,尽管我自己花了一段时间看它。当我有+1次幂时,我将+1作为第一个答案。