使用关键字参数end=' '时出现SyntaxError

128 投票
17 回答
495451 浏览
提问于 2025-04-15 20:29

当我尝试运行这段代码时:

if Verbose:
   print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')

我收到一个 SyntaxError 错误,提示 end=' ' 是无效的语法。

为什么会出现这个问题呢?


可以查看 “SyntaxError: Missing parentheses in call to 'print'” 在 Python 中是什么意思? 来了解相反的问题。

可以查看 “为什么在 Python 2.7 中 print 的括号是可选的?” 来了解 Python 2 对 print 作为语句的处理的一般影响。

17 个回答

17

在Python 2.7中,你可以这样做

mantra = 'Always look on the bright side of life'
for c in mantra: print c,

#output
A l w a y s   l o o k   o n   t h e   b r i g h t   s i d e   o f   l i f e

在Python 3.x中

myjob= 'hacker'
for c in myjob: print (c, end=' ')
#output 
h a c k e r 
52

这样怎么样:

#Only for use in Python 2.6.0a2 and later
from __future__ import print_function

这样你就可以使用Python 3.0风格的print函数,而不需要一个个去手动修改所有的print出现的地方了 :)

161

你确定你在用的是Python 3.x吗?因为在Python 2.x中,这种语法是不可用的,因为print还是一个语句。

print("foo" % bar, end=" ")

在Python 2.x中是和

print ("foo" % bar, end=" ")

一样的

print "foo" % bar, end=" "

也就是说,把它当作一个带有元组参数的print调用。

这显然是错误的语法(字面量不接受关键字参数)。在Python 3.x中,print是真正的函数,所以它也可以接受关键字参数。

在Python 2.x中,end=" "的正确用法是:

print "foo" % bar,

(注意最后的逗号,这样可以让输出以空格结束,而不是换行)

如果你想对输出有更多控制,可以直接使用sys.stdout。这样做不会对输出进行任何特殊处理。

当然,在一些较新的Python 2.x版本中(2.5应该可以,不确定2.4是否可以),你可以使用__future__模块在你的脚本文件中启用它:

from __future__ import print_function

同样的道理适用于unicode_literals和其他一些不错的功能(比如with_statement)。不过在一些非常旧的版本(也就是在这个功能被引入之前创建的)Python 2.x中,这些是无法使用的。

撰写回答