Mam ten skrypt Pythona, w którym muszę uruchomić gdal_retile.py
ale mam wyjątek w tej linii:
if Verbose:
print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')
end=''
Jest niepoprawna składnia. Ciekaw jestem, dlaczego i co prawdopodobnie zamierzał zrobić autor.
Jestem nowy w Pythonie, jeśli jeszcze nie zgadłeś.
Myślę, że główną przyczyną problemu jest to, że ten import zawodzi i dlatego należy go powstrzymać 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 *
__future__
importu.ClassNames
powinny zaczynać się małą literą.Odpowiedzi:
Czy na pewno używasz Pythona 3.x? Składnia nie jest dostępna w Pythonie 2.x, ponieważ
print
nadal jest instrukcją.w Pythonie 2.x jest identyczny z
lub
tj. jako wezwanie do wypisania z krotką jako argumentem.
To oczywiście zła składnia (literały nie przyjmują argumentów słów kluczowych). W Pythonie 3.x
print
jest rzeczywistą funkcją, więc przyjmuje również argumenty słów kluczowych.Prawidłowy idiom w Pythonie 2.x dla
end=" "
:(zwróć uwagę na ostatni przecinek, oznacza to, że kończy się on spacją, a nie podziałem wiersza)
Jeśli chcesz mieć większą kontrolę nad wyjściem, rozważ użycie
sys.stdout
bezpośrednio. To nie zrobi żadnej specjalnej magii z wyjściem.Oczywiście w nieco nowszych wersjach Pythona 2.x (2.5 powinno go mieć, nie jestem pewien co do 2.4), możesz użyć
__future__
modułu, aby włączyć go w swoim pliku skryptu:To samo dotyczy
unicode_literals
i innych fajnych rzeczy (with_statement
na przykład). Nie zadziała to jednak w naprawdę starych wersjach (tj. Utworzonych przed wprowadzeniem tej funkcji) Pythona 2.x.źródło
dpkg -p python
i była to wersja 2.xx.xx. Dziękuję bardzo, zastosowałem sugestię, aby ująć to w formieprint "foo" %bar,
i zadziałało idealnie.print foo, bar
iwprint (foo, bar)
Pythonie 2. Pierwsza jestprint
instrukcją z dwoma elementami na liście „argumentów”; ta ostatnia jestprint
instrukcją z pojedynczą krotką na liście argumentów.print("foo" % bar, end=" ")
nie zadziała, ponieważbar
nie jest zdefiniowany; więc co jestbar
w twoim przykładzie? (Przynajmniej dla mnie z Pythonem 3.7)Co powiesz na to:
Pozwala to na używanie
print
funkcji w stylu Pythona 3.0 bez konieczności ręcznej edycji wszystkich wystąpieńprint
:)źródło
W Pythonie 2.7 oto jak to zrobić
W Pythonie 3.x
źródło
h a c k e r
między znakami są spacje. Używam Pythona 3.7.3 i nie mam żadnych spacjiend=''
.Przede wszystkim brakuje cytatu na początku, ale prawdopodobnie jest to błąd kopiowania / wklejania.
W Pythonie 3.x
end=' '
część umieszcza spację po wyświetlanym ciągu zamiast nowej linii. Aby zrobić to samo w Pythonie 2.x, na końcu wstaw przecinek:źródło
Myślę, że on używa Pythona 3.0, a ty używasz Pythona 2.6.
źródło
print("foo" % bar, end = " ")
wyzwala błąd składni w Pythonie 2.6 podend = " "
podobnie jak brakuje cytat robi :)To tylko wersja. Od Pythona 3.x print jest w rzeczywistości funkcją, więc teraz przyjmuje argumenty jak każda normalna funkcja.
Chodzi
end=' '
tylko o to, aby powiedzieć, że chcesz wstawić spację po końcu instrukcji zamiast znaku nowego wiersza. W Pythonie 2.x musiałbyś to zrobić, umieszczając przecinek na końcu instrukcji print.Na przykład w środowisku Python 3.x:
Daje następujący wynik:
Natomiast:
Jako wyjście da:
źródło
print()
może być pomocny, ponieważ można tam zobaczyć domyślną wartość'\n'
argumentuend
: docs.python.org/3/library/functions.html#printWygląda na to, że brakuje ci otwierającego podwójnego cudzysłowu. Próbować:
źródło
Myślę, że autor prawdopodobnie miał na myśli:
Po tym brakuje mu wstępnego cytatu
print(
.Należy zauważyć, że jak z Pythona 3.0 ,
print
jest funkcją, w przeciwieństwie do rachunku, jeśli używasz starszych wersji Pythona odpowiednikiem byłoby:Te
end
środki parametryczne, że linia staje się' '
w końcu, zamiast znaku nowej linii. Odpowiednik we wcześniejszych wersjach Pythona to:(dzięki Ignacio).
źródło
,
na końcu wystarczy.POSŁUGIWAĆ SIĘ ::
python3 filename.py
Miałem taki błąd, to wystąpiło, ponieważ mam dwie wersje Pythona zainstalowane na moim dysku, a mianowicie python2.7 i python3. Oto mój kod:
kiedy uruchamiam go za pomocą polecenia
python lines.py
, otrzymałem następujący błądkiedy uruchamiam go poleceniem, które
python3 lines.py
wykonałem pomyślnieźródło
W przypadku Pythona 2.7 miałem ten sam problem. Po prostu użyj „ from __future__ import print_function ” bez cudzysłowów, aby rozwiązać ten problem. Zapewnia to Pythonowi 2.6 i nowszym Pythonowi 2.x możliwość korzystania z funkcji drukowania Python 3.x.
źródło
Spróbuj tego, jeśli pracujesz z Pythonem 2.7:
źródło
Nawet ja otrzymywałem dzisiaj ten sam błąd. I doświadczyłem interesującej rzeczy. Jeśli używasz Pythona 3.x i nadal otrzymujesz błąd, może to być powód:
Otrzymałem dziś ten sam błąd i zauważyłem to. Zaufaj mi, kiedy wykonuję kod z odpowiedniego okna powłoki (w wersji 3.x), otrzymałem zadowalające wyniki
źródło
musimy zaimportować nagłówek przed użyciem
end=''
, ponieważ nie jest on uwzględniony w normalnym środowisku uruchomieniowym Pythona.teraz będzie działać idealnie
źródło
Kompatybilny z obu Python 2 i 3 :
Kompatybilny tylko z Pythonem 2
Kompatybilny tylko z Pythonem 3
źródło