python print end =''


115

我有这个需要运行的python脚本 gdal_retile.py

但是我在这条线上有一个例外:

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

end=''是无效的语法。我很好奇为什么以及作者可能打算做什么。

如果您还没猜到,我是python的新手。


我认为问题的根本原因是这些导入失败,因此必须包含此导入 from __future__ import print_function

try: 
   from osgeo import gdal
   from osgeo import ogr
   from osgeo import osr
   from osgeo.gdalconst import *
except:
   import gdal
   import ogr
   import osr
   from gdalconst import *

2
如果您发布回溯信息以最好地诊断收到的异常,则确实有帮助。明显的语法错误是由于缺少引号引起的。如果已解决该问题,则在Python 2中仍然会出现语法错误,该Python在没有__future__导入的情况下不具有打印功能。
Mike Graham

2
顺便说ClassNames一句,不是的变量应该以小写字母开头。
Mike Graham 2010年

wrt / @Mike,请参阅python.org/dev/peps/pep-0008,以获取有关Python中变量命名和编码样式的完整指南。遵循准则是一个好主意,因为在Python中,您有特权使用基本一致的库,因此即使在使用其他人的代码时,也可以避免使用通常的猜测游戏(例如PHP)。
艾伦·梅

5
在将来寻求有关错误(尤其是语法错误)的帮助时,应尝试提供您尝试运行确切代码,而无需重新键入。
Mike Graham

@Mike-我通常不会再打扰它,但是由于代码在远程计算机上,所以我无法这样做。我一定会在以后更加小心。
哈斯(Hath)

Answers:


155

您确定使用的是Python 3.x吗?该语法在Python 2.x中不可用,因为print它仍然是一条语句。

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

在Python 2.x中与

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

要么

print "foo" % bar, end=" "

即作为调用以元组为参数进行打印。

显然这是错误的语法(文字不带关键字参数)。在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中不起作用。


1
我使用检查了我的版本dpkg -p python,它是版本2.xx.xx。非常感谢,我以建议的形式提出了建议,print "foo" %bar, 并且效果很好。
梅拉德2014年

记住,Python 2 print foo, barprint (foo, bar)Python 2 之间有一个(细微的)区别print。后者是一个print在其参数列表中具有单个元组的语句。
chepner

您的示例print("foo" % bar, end=" ")无效,因为bar未定义;那么bar您的示例是什么?(至少对于我使用Python 3.7而言)
Qaswed

50

这个怎么样:

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

这使您可以使用Python 3.0样式print功能,而无需手动编辑所有出现的print:)


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 

5
伙计,你只是解决了一个困扰我几天的问题,我只记得那些哨声和旧时的情景,但不记得歌词,现在我终于弄清楚那首歌是什么!
Sphynx-HenryAY

@ Sphynx-HenryAY乐于帮助您,兄弟
Ritesh Karwa

在第二个示例中,似乎h a c k e r 在字符之间有空格。我使用的是Python 3.7.3,而我根本没有空格end=''
Nagev

@Nagev只是在''end =''之间放置一个空格
Ritesh Karwa

谢谢,我希望有空格,只是我以为我看到的代码没有空格,但输出却是隔开的,这似乎是不一致的,仅此而已。
Nagev

5

首先,您在开头缺少引号,但这可能是复制/粘贴错误。

在Python 3.x中,end=' '零件将在显示的字符串之后而不是换行符后放置一个空格。要在Python 2.x中执行相同的操作,请在末尾加逗号:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),

我很想在python 2中做这样的事情,语法是什么?你是什​​么意思加逗号?
雷米

1
@Rémi我的答案中的代码是在Python 2中...而我指的是最后的逗号。
interjay 2015年

4

我认为他正在使用Python 3.0,而您正在使用Python 2.6。


1
好点子!就像缺少引号一样print("foo" % bar, end = " ")在Python 2.6中触发语法错误end = " ":)
badp 2010年

3

这只是一个版本。由于Python 3.x的print实际上是一个函数,因此它现在像任何普通函数一样接受参数。

end=' '仅仅是说,你要声明,而不是一个新行字符结束后的空间。在Python 2.x中,您必须通过在print语句的末尾放置一个逗号来做到这一点。

例如,在Python 3.x环境中:

while i<5:
    print(i)
    i=i+1

将给出以下输出:

0
1
2
3
4

如:

while i<5:
    print(i, end = ' ')
    i=i+1

将给出作为输出:

0 1 2 3 4

链接到的官方文档print()可能会有所帮助,因为可以看到'\n'该参数的默认值enddocs.python.org/3/library/functions.html#print
Qaswed

不要忘记上面的示例最后一个空格:“ hacker”,这里的输出应该是“ 0 1 2 3 4”,最后一个空格是对应的
alant

2

看来您只是缺少一个开双引号。尝试:

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

1

我认为作者可能意味着:

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

他在之后缺少首字母报价print(

请注意,从Python 3.0开始,它print是与语句相对的函数,如果您使用的是旧版Python,则等效项为:

print "Building internam Index for %d tile(s) ..." % len(inputTiles)

end参数表示该行' '位于末尾,而不是换行符。Python的早期版本中的等效项是:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),

(感谢Ignacio)。


1
将a添加,到末尾即可。
伊格纳西奥·巴斯克斯

1

用 :: python3 filename.py

我有这样的错误,是因为我在驱动器上安装了两个版本的python,即python2.7和python3。以下是我的代码:

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

当我通过命令运行它时,python lines.py出现以下错误

#!usr/bin/python

f = open('lines.txt')
for line in f.readlines():
        print(line,end ='')

当我通过命令python3 lines.py成功运行它时


3
#!/ usr / bin / env python3
Mingliang Liu

1

对于python 2.7,我有相同的问题,只需使用“ from __future__ import print_function ”不带引号即可解决此问题。这确保Python 2.6和更高版本的Python 2.x可以使用Python 3.x打印功能。


1

如果您使用的是python 2.7,请尝试以下一项:

from __future__ import print_function

欢迎使用StackOverflow:如果您发布代码,XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮({})或使用键盘上的Ctrl + K进行格式化和语法突出显示它!
WhatsThePoint

0

甚至我今天也遇到同样的错误。我经历了一件有趣的事情。如果您使用的是python 3.x并且仍然收到错误,则可能是原因:

您在同一驱动器上安装了多个python版本。当您按f5按钮时,将弹出python shell窗口(版本<3.x)

今天我遇到了同样的错误,并注意到了那件事。相信我,当我从适当的Shell窗口(版本3.x)执行代码时,我得到了令人满意的结果


0

我们需要在使用之前导入标头end='',因为标头不包含在python的正常运行时中。

from __future__ import print_function

现在应该可以正常工作了


0

兼容两者 的Python 2和3

sys.stdout.write('mytext')

仅与Python 2兼容

print 'mytext',

仅与Python 3兼容

print('mytext', end='')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.