Python print end = ''

У меня есть этот python script, где мне нужно запустить 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 *

Ответ 1

Вы уверены, что используете 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__, чтобы включить его в ваш файл script:

from __future__ import print_function

То же самое происходит с unicode_literals и некоторыми другими приятными вещами (например, with_statement). Это не будет работать в действительно старых версиях (т.е. Созданных до того, как была введена функция) Python 2.x.

Ответ 2

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

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

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

Ответ 3

В 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.х

myjob= 'hacker'
for c in myjob: print (c, end=' ')
#output 
h a c k e r 

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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

from __future__ import print_function

Ответ 11

Даже сегодня я получал ту же самую ошибку. И я испытал интересную вещь. Если вы используете python 3.x и все еще получаете ошибку, это может быть причиной:

У вас несколько версий python, установленных на одном диске. И когда вы назначаете кнопку f5 в окне оболочки python (от ver. < 3.x) всплывает

Сегодня я получал такую ​​же ошибку и заметил эту вещь. Поверьте мне, когда я выполню свой код из соответствующего окна оболочки (версии 3.x), я получил удовлетворительные результаты

Ответ 12

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

нам нужно импортировать заголовок перед использованием end='', так как он не включен в обычное время выполнения python.

from __future__ import print_function

он отлично работает сейчас