python print end =''

时间:2010-03-16 16:26:54

标签: python

我有这个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 *

16 个答案:

答案 0 :(得分:135)

您确定使用的是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是一个实际的函数,所以它也需要关键字参数。

{2.}}的Python 2.x中的正确习语是:

end=" "

(注意最后一个逗号,这使得它以空格而不是换行符结束)

如果您想要更多地控制输出,请考虑直接使用print "foo" % bar, 。这不会对输出产生任何特殊的魔力。

当然,在最新版本的Python 2.x(2.5应该有它,不确定2.4)中,您可以使用sys.stdout模块在​​脚本文件中启用它:

__future__

同样适用于from __future__ import print_function 和其他一些好东西(例如unicode_literals)。但是,这在Python 2.x的旧版本(即在引入特性之前创建)中不起作用。

答案 1 :(得分:44)

这个怎么样:

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

这允许您使用Python 3.0样式print函数,而无需手动编辑print的所有实例:)

答案 2 :(得分:13)

在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 

答案 3 :(得分:5)

首先,你在开头就错过了一个引用,但这可能是一个复制/粘贴错误。

在Python 3.x中,end=' '部分将在显示的字符串后面放置一个空格而不是换行符。要在Python 2.x中执行相同的操作,最后会添加一个逗号:

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

答案 4 :(得分:4)

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

答案 5 :(得分: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

答案 6 :(得分:2)

看起来你只是错过了开场双引号。尝试:

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

答案 7 :(得分: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)。

答案 8 :(得分:1)

对于python 2.7,我遇到了同样的问题 只需使用“来自__future__ import print_function ”不加引号来解决此问题。这可以确保Python 2.6及更高版本的Python 2.x可以使用Python 3.x打印功能。

答案 9 :(得分:1)

如果您正在使用python 2.7,请试试这个:

from __future__ import print_function

答案 10 :(得分:1)

基本上,它发生在python2.7 这是我的工作原理代码:

  i=5
while(i):
    print i,
    i=i-1
Output:
5 4 3 2 1

答案 11 :(得分:0)

即使我今天也遇到了同样的错误。我经历了一件有趣的事情。 如果你正在使用python 3.x并仍然收到错误,那可能是一个原因:

  

您在同一个驱动器上安装了多个python版本。什么时候   你是f5按钮的python shell窗口(版本&lt; 3.x)   弹出

我今天得到同样的错误,并注意到了这件事。相信我,当我从正确的shell窗口(版本3.x)执行我的代码时,我得到了满意的结果

答案 12 :(得分:0)

USE :: 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运行它时,我成功执行了

答案 13 :(得分:0)

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

from __future__ import print_function

它现在应该完美地运作

答案 14 :(得分:0)

同时兼容 Python 2和3 :

sys.stdout.write('mytext')

仅与 Python 2

兼容
print 'mytext',

仅与 Python 3

兼容
print('mytext', end='')

答案 15 :(得分:0)

我遇到过这个错误,是因为使用了 2.7.15 版,但 end='' 仅适用于第 3 版。

示例: 将数组导入为 arr a=arr.array('i',[1,2,3,4]) 对于范围内的 x (0,3): 打印 ("%d" % a[x], end='')

输出:使用版本 2.7 时显示错误“无效语法”

对于 2.7.15 版 使用这种语法 将数组导入为 arr a=arr.array('i',[1,2,3,4]) 对于范围内的 x (0,3): 打印 ("%d" % a[x]), 输出:1 2 3