2010-03-16 34 views
75

我有这样的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中的一个语法错误,它没有没有'__future__'导入的打印功能。 – 2010-03-16 16:36:35

+2

在旁边,不是'ClassNames'的变量应该以小写字母开头。 – 2010-03-16 16:37:13

+0

wrt/@Mike,请参阅http://www.python.org/dev/peps/pep-0008/了解Python中变量命名和编码风格的完整指南。遵守指导原则是一个好主意,因为在Python中,您有权利使用大多数一致的库,因此即使在使用其他人的代码时也可以避免常见的猜谜游戏(例如PHP)。 – 2010-03-16 16:54:14

回答

108

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

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

in 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'的形式,并且它工作得很好。 – Mehrad 2014-05-05 23:20:59

+1

简单地将**,**放在打印结尾处是非常有用的。 – 2015-11-24 19:17:20

+0

请记住,Python 2中的'print foo,bar'和'print(foo,bar)'之间存在(微妙的)区别。前者是在其“参数”列表中包含两个项目的“print”语句;后者是一个在其参数列表中具有单个元组的“print”语句。 – chepner 2017-08-11 12:42:30

38

如何:

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

这使得您可以使用Python 3.0风格的print函数,而无需手动编辑所有出现的print :)

1

我觉得作者可能是指:

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

print(后失踪的最初报价。

注意,由于Python 3.0print是相对于语句的功能,如果你正在使用旧版本的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

添加','到最后会做到这一点。 – 2010-03-16 16:37:54

2

看起来你只是缺少一个左双引号。尝试:

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

我认为他使用的是Python 3.0,而您使用的是Python 2.6。

+1

好点! 'print(“foo”%bar,end =“”)'在Python 2.6的'end ='“'下触发语法错误,就像缺少的引号一样:) – badp 2010-03-16 16:33:04

5

首先,你失踪开始报价,但是这可能是一个复制/粘贴错误。

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

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

我在Python 2中做了这样的事情语法是什么?你是什​​么意思加逗号? – 2015-09-23 09:35:39

+1

@Rémi我的答案中的代码是在Python 2中......我指的是最后的逗号。 – interjay 2015-09-23 14:56:22

0

即使我今天得到同样的错误。我经历了一件有趣的事情。 如果你使用python 3.x和仍然得到错误,这可能是一个原因:

您必须安装在同一驱动器上的多个Python版本。当 你presing的F5键蟒蛇shell窗口(VER的。< 3.X) 弹起

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

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运行它,我成功地执行

+1

#!/ usr/bin/env python3 – 2014-06-23 12:51:33

0

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

from __future__ import print_function 

应当很好地工作,现在

0

这仅仅是一个版本的事情。自从Python 3.x以来,print实际上是一个函数,所以它现在需要像任何普通函数一样的参数。

end=' '只是说您想在语句结束后使用空格而不是换行符。在Python 2.x中,您必须通过在打印语句的结尾处放置逗号来执行此操作。

例如,当在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 
7

在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 
+0

男人,你只是解决了一个令我困惑的问题,我只记得那些吹口哨和旧时的场景,但不是莱里斯,现在我终于弄清楚那首歌是什么! ! – 2017-03-10 20:01:21

+0

@ Sphynx-HenryAY很高兴帮助你兄弟 – 2017-03-10 20:40:02

1

对于Python 2.7我有同样的问题 只要使用“从__future__导入print_function“没有引号来解决这个问题。这确保Python 2.6和更高版本的Python 2.x可以使用Python 3.x打印功能。

1

试试这一个,如果你正在使用Python 2.7的工作:

from __future__ import print_function 
+0

欢迎使用StackOverflow:如果您发布代码,XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮({})或者在键盘上使用Ctrl + K来很好地格式化和语法突出显示它! – WhatsThePoint 2017-12-21 08:04:18