J'ai ce script python où je dois exécuter gdal_retile.py
mais j'obtiens une exception sur cette ligne:
if Verbose:
print("Building internam Index for %d tile(s) ..." % len(inputTiles), end=' ')
La end=''
syntaxe n'est pas valide. Je suis curieux de savoir pourquoi et ce que l'auteur voulait probablement faire.
Je suis nouveau sur python si vous ne l'avez pas déjà deviné.
Je pense que la cause première du problème est que ces importations échouent et qu'il faut donc contenir cette importation 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__
importation.ClassNames
devraient commencer par une lettre minuscule.Réponses:
Êtes-vous sûr d'utiliser Python 3.x? La syntaxe n'est pas disponible dans Python 2.x car il
print
s'agit toujours d'une instruction.en Python 2.x est identique à
ou
c'est-à-dire comme un appel à imprimer avec un tuple comme argument.
C'est évidemment une mauvaise syntaxe (les littéraux ne prennent pas d'arguments de mot-clé). En Python 3.x
print
est une fonction réelle, donc elle prend aussi des arguments de mots-clés.L'idiome correct dans Python 2.x pour
end=" "
est:(notez la virgule finale, cela fait terminer la ligne avec un espace plutôt qu'un saut de ligne)
Si vous voulez plus de contrôle sur la sortie, envisagez d'utiliser
sys.stdout
directement. Cela ne fera aucune magie spéciale avec la sortie.Bien sûr, dans les versions un peu récentes de Python 2.x (2.5 devrait l'avoir, pas sûr de 2.4), vous pouvez utiliser le
__future__
module pour l'activer dans votre fichier de script:Il en va de même avec d'
unicode_literals
autres choses intéressantes (with_statement
par exemple). Cela ne fonctionnera pas dans les versions vraiment anciennes (c'est-à-dire créées avant l'introduction de la fonctionnalité) de Python 2.x, cependant.la source
dpkg -p python
et c'était la version 2.xx.xx. Merci beaucoup, j'ai appliqué la suggestion de le mettre sous la forme deprint "foo" %bar,
et cela a parfaitement fonctionné.print foo, bar
etprint (foo, bar)
en Python 2. La première est uneprint
instruction avec deux éléments dans sa liste "d'arguments"; ce dernier est uneprint
instruction avec un seul tuple dans sa liste d'arguments.print("foo" % bar, end=" ")
ne fonctionnera pas, car ilbar
n'est pas défini; alors qu'est-ce quebar
votre exemple? (Au moins pour moi avec Python 3.7)Que dis-tu de ça:
Cela vous permet d'utiliser la
print
fonction de style Python 3.0 sans avoir à modifier manuellement toutes les occurrences deprint
:)la source
En python 2.7, voici comment procéder
En python 3.x
la source
h a c k e r
ait des espaces entre les caractères. J'utilise Python 3.7.3 et je n'obtiens aucun espace avecend=''
.Tout d'abord, il vous manque un devis au début mais il s'agit probablement d'une erreur de copier / coller.
Dans Python 3.x, la
end=' '
pièce placera un espace après la chaîne affichée au lieu d'une nouvelle ligne. Pour faire la même chose dans Python 2.x, vous mettriez une virgule à la fin:la source
Je pense qu'il utilise Python 3.0 et que vous utilisez Python 2.6.
la source
print("foo" % bar, end = " ")
déclenche une erreur de syntaxe dans Python 2.6 sousend = " "
comme le fait la citation manquante :)C'est juste une chose de version. Depuis Python 3.x, l'impression est en fait une fonction, elle prend donc maintenant des arguments comme n'importe quelle fonction normale.
C'est
end=' '
juste pour dire que vous voulez un espace après la fin de l'instruction au lieu d'un caractère de nouvelle ligne. Dans Python 2.x, vous devrez le faire en plaçant une virgule à la fin de l'instruction d'impression.Par exemple, dans un environnement Python 3.x:
Donnera la sortie suivante:
Tandis que:
Donnera comme sortie:
la source
print()
pourrait être utile, car on peut y voir la valeur par défaut'\n'
de l'argumentend
: docs.python.org/3/library/functions.html#printIl semble que vous manquez juste un guillemet double d'ouverture. Essayer:
la source
Je pense que l'auteur voulait probablement dire:
Il manque une citation initiale après
print(
.Notez qu'à partir de Python 3.0 ,
print
est une fonction par opposition à une instruction, si vous utilisez des versions plus anciennes de Python, l'équivalent serait:Le
end
paramètre signifie que la ligne arrive' '
à la fin plutôt qu'un caractère de nouvelle ligne. L'équivalent dans les versions antérieures de Python est:(merci Ignacio).
la source
,
à la fin le fera.UTILISATION ::
python3 filename.py
J'ai eu une telle erreur, cela s'est produit parce que j'ai deux versions de python installées sur mon lecteur, à savoir python2.7 et python3. Voici mon code:
quand je l'exécute par la commande,
python lines.py
j'ai l'erreur suivantequand je l'exécute par la commande que
python3 lines.py
j'ai exécutée avec succèsla source
Pour python 2.7, j'ai eu le même problème. Utilisez simplement " from __future__ import print_function " sans guillemets pour résoudre ce problème. Cela garantit que Python 2.6 et les versions ultérieures Python 2.x peuvent utiliser la fonction d'impression Python 3.x.
la source
Essayez celui-ci si vous travaillez avec python 2.7:
la source
Même moi, je recevais la même erreur aujourd'hui. Et j'ai vécu une chose intéressante. Si vous utilisez python 3.x et que vous obtenez toujours l'erreur, cela peut être une raison:
J'avais la même erreur aujourd'hui et j'ai remarqué cette chose. Croyez-moi, lorsque j'exécute mon code à partir de la fenêtre shell appropriée (de la version 3.x), j'ai obtenu des résultats satisfaisants
la source
nous devons importer un en-tête avant de l'utiliser
end=''
, car il n'est pas inclus dans l'exécution normale de python.ça fonctionnera parfaitement maintenant
la source
Compatible avec les deux Python 2 et 3 :
Compatible uniquement avec Python 2
Compatible uniquement avec Python 3
la source