конец печати python = '' - PullRequest
       36

конец печати python = ''

104 голосов
/ 16 марта 2010

У меня есть этот скрипт на 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 *

Ответы [ 13 ]

138 голосов
/ 16 марта 2010

Вы уверены, что используете 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 является реальной функцией, поэтому она также принимает аргументы с ключевыми словами.

Правильная идиома в 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, однако.

45 голосов
/ 16 марта 2010

Как насчет этого:

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

Это позволяет использовать функцию print в стиле Python 3.0 без необходимости вручную редактировать все вхождения print:)

14 голосов
/ 29 июля 2015

В 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

В питоне 3.x

myjob= 'hacker'
for c in myjob: print (c, end=' ')
#output 
h a c k e r 
5 голосов
/ 16 марта 2010

Прежде всего, вам не хватает кавычки в начале, но это, вероятно, ошибка копирования / вставки.

В Python 3.x часть end=' ' будет помещать пробел после отображаемой строки вместо новой строки. Чтобы сделать то же самое в Python 2.x, вы должны поставить запятую в конце:

print "Building internam Index for %d tile(s) ..." % len(inputTiles),
4 голосов
/ 16 марта 2010

Я думаю, что он использует Python 3.0, а вы используете Python 2.6.

3 голосов
/ 12 июня 2015

Это просто версия. Начиная с Python 3.x, печать на самом деле является функцией, поэтому теперь она принимает аргументы как любая нормальная функция.

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
2 голосов
/ 16 марта 2010

Похоже, вы просто пропустили двойную кавычку. Попробуйте:

if Verbose:
   print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')
1 голос
/ 21 декабря 2017

Попробуйте это, если вы работаете с Python 2.7:

from __future__ import print_function
1 голос
/ 07 марта 2017

Для python 2.7 у меня была такая же проблема Просто используйте « from __future__ import print_function » без кавычек для решения этой проблемы. Это гарантирует, что Python 2.6 и более поздние версии Python 2.x могут использовать функцию печати Python 3.x.

1 голос
/ 16 марта 2010

Я думаю, что автор, вероятно, имел в виду:

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),

(спасибо Игнасио).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...