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