0
votes

Le code de Jupyter Notebook ne s'exécute pas dans Python 2.7.18

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}")


5 commentaires

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 et range . Vous devrez vous y attaquer.


3 Réponses :


2
votes

Utilisez une alternative au format la place f-string fonctionnant en python 3.6+ :

def concat(i, j):
    return eval("{}{}{}".format(i, j, k))


1 commentaires

Il existe également un package tiers future-fstrings qui est un backport de fstrings vers python <3.6.



0
votes

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/


0 commentaires

0
votes

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


0 commentaires