Eu tenho este script python onde preciso executar gdal_retile.py
mas recebo uma exceção nesta linha:
if Verbose:
print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')
o end=''
sintaxe é inválida. Estou curioso para saber o porquê e o que o autor provavelmente pretendia fazer.
Sou novo em python, se você ainda não adivinhou.
Acho que a causa raiz do problema é que essas importações estão falhando e, portanto, deve-se conter essa importação 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__
importação.ClassNames
devem começar com uma letra minúscula.Respostas:
Tem certeza de que está usando Python 3.x? A sintaxe não está disponível no Python 2.x porque
print
ainda é uma instrução.em Python 2.x é idêntico a
ou
ou seja, como uma chamada para imprimir com uma tupla como argumento.
Obviamente, essa sintaxe é ruim (literais não aceitam argumentos de palavra-chave). No Python 3.x
print
é uma função real, portanto, também aceita argumentos de palavra-chave.O idioma correto no Python 2.x para
end=" "
é:(observe a vírgula final, isso faz com que a linha termine com um espaço em vez de uma quebra de linha)
Se você quiser mais controle sobre a saída, considere usar
sys.stdout
diretamente. Isso não fará nenhuma mágica especial com a saída.Claro, em versões um tanto recentes do Python 2.x (2.5 deve ter, não tenho certeza sobre 2.4), você pode usar o
__future__
módulo para habilitá-lo em seu arquivo de script:O mesmo acontece com
unicode_literals
e algumas outras coisas boas (with_statement
por exemplo). Isso não funcionará em versões realmente antigas (ou seja, criadas antes do recurso ser introduzido) do Python 2.x.fonte
dpkg -p python
e era a versão 2.xx.xx. Muito obrigado, apliquei a sugestão de colocá-lo na forma deprint "foo" %bar,
e funcionou perfeitamente bem.print foo, bar
eprint (foo, bar)
no Python 2. O primeiro é umaprint
instrução com dois itens em sua lista de "argumentos"; o último é umaprint
instrução com uma única tupla em sua lista de argumentos.print("foo" % bar, end=" ")
não funcionará, poisbar
não está definido; então o que estábar
em seu exemplo? (Pelo menos para mim com Python 3.7)Que tal agora:
Isso permite que você use a
print
função de estilo Python 3.0 sem ter que editar manualmente todas as ocorrências deprint
:)fonte
No python 2.7, aqui está como você faz
Em python 3.x
fonte
h a c k e r
há espaços entre os caracteres. Estou usando o Python 3.7.3 e não recebo nenhum espaço comend=''
.Em primeiro lugar, está faltando uma citação no início, mas provavelmente é um erro de copiar / colar.
No Python 3.x, a
end=' '
parte colocará um espaço após a string exibida em vez de uma nova linha. Para fazer a mesma coisa no Python 2.x, você colocaria uma vírgula no final:fonte
Acho que ele está usando Python 3.0 e você está usando Python 2.6.
fonte
print("foo" % bar, end = " ")
aciona um erro de sintaxe no Python 2.6 em,end = " "
assim como a citação ausente :)Isso é apenas uma coisa de versão. Como o Python 3.x, a impressão é na verdade uma função, então agora ela recebe argumentos como qualquer função normal.
O
end=' '
é só para dizer que você quer um espaço após o fim da instrução em vez de um caractere de nova linha. No Python 2.x você teria que fazer isso colocando uma vírgula no final da instrução de impressão.Por exemplo, quando em um ambiente Python 3.x:
Fornecerá a seguinte saída:
Enquanto que:
Dará como saída:
fonte
print()
pode ser útil, já que é possível ver o valor padrão'\n'
para o argumentoend
: docs.python.org/3/library/functions.html#printParece que está faltando uma aspa dupla de abertura. Experimentar:
fonte
Acho que o autor provavelmente quis dizer:
Ele está perdendo uma citação inicial depois
print(
.Observe que, a partir do Python 3.0 ,
print
é uma função e não uma instrução; se você estiver usando versões mais antigas do Python, o equivalente seria:O
end
parâmetro significa que a linha fica' '
no final em vez de um caractere de nova linha. O equivalente nas versões anteriores do Python é:(obrigado Ignacio).
fonte
,
ao final vai resolver.USAR ::
python3 filename.py
Eu tive esse erro, isso ocorreu porque eu tenho duas versões do python instaladas na minha unidade, ou seja, python2.7 e python3. A seguir estava meu código:
quando o executo pelo comando
python lines.py
, recebo o seguinte erroquando o executo pelo comando
python3 lines.py
, executei com sucessofonte
Para o python 2.7, tive o mesmo problema. Basta usar " from __future__ import print_function " sem aspas para resolver esse problema. Isso garante que o Python 2.6 e posterior Python 2.x pode usar a função de impressão do Python 3.x.
fonte
Experimente este se estiver trabalhando com o python 2.7:
fonte
Até eu estava recebendo o mesmo erro hoje. E experimentei uma coisa interessante. Se você estiver usando o python 3.x e ainda receber o erro, pode ser um motivo:
Eu estava recebendo o mesmo erro hoje e percebi isso. Acredite em mim, quando executo meu código na janela de shell adequada (da versão 3.x), obtive resultados satisfatórios
fonte
precisamos importar um cabeçalho antes de usar
end=''
, pois ele não está incluído no tempo de execução normal do python.deve funcionar perfeitamente agora
fonte
Compatível com ambos Python 2 e 3 :
Compatível apenas com Python 2
Compatível apenas com Python 3
fonte