J'ai écrit une fonction qui s'exécutait sur le Jupyter Notebook. Maintenant, je veux exécuter le même code en Python 2.7.18 mais obtenir une erreur de syntaxe dans la partie "" ..
import datetime now = datetime.datetime.now() i = now.year j = now.month k = now.day def concat(i, j): return eval(f"{i}{j}{k}")
3 Réponses :
Utilisez une alternative au format
la place f-string
fonctionnant en python 3.6+
:
def concat(i, j): return eval("{}{}{}".format(i, j, k))
Il existe également un package tiers future-fstrings qui est un backport de fstrings vers python <3.6.
Vous utilisez des f-strings ici en python2, mais cette fonctionnalité a été introduite dans python3.6
return eval(f"{i}{j}{k}")
Vous pouvez formater la sortie normalement, ou vous pouvez utiliser le package d'émulateur f-string pour python 2: https://pypi.org/project/fstrings/
La chaîne f ne fonctionne que sur Python 3.6+. Si vous avez vraiment besoin de fonctionner sur Python 2.7.18, vous devrez peut-être changer votre chaîne, utilisez .format ou utilisez l'opérateur%
au lieu de
eval(f"{i}{j}{k}")
utilisation
eval("{0}{1}{2}".format(i,j,k))
ou le plus ancien
eval("%s %s %s" % (i, j ,k)")
Une raison pour laquelle vous souhaitez utiliser Python 2? Python 2 est arrivé en fin de vie cette année.
pourquoi voulez-vous exécuter de nouvelles choses en python 2.7?
Les chaînes f ne sont pas prises en charge jusqu'à Py3.6.
La raison n'a rien à voir avec la question. Je n'ai pas demandé la raison
Alors sachez qu'il y a beaucoup d'autres changements entre Python 2 et Python 3, par exemple le comportement de
print
,input
etrange
. Vous devrez vous y attaquer.