2010-03-16 38 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