web-dev-qa-db-fra.com

Comment échapper aux f-strings dans python 3.6?

J'ai une chaîne dans laquelle je voudrais des accolades, mais je profite également de la fonction des chaînes f. Y a-t-il une syntaxe qui fonctionne pour cela?

Voici deux façons dont cela ne fonctionne pas. Je voudrais inclure le texte littéral "{bar} "dans le cadre de la chaîne.

foo = "test"
fstring = f"{foo} {bar}"

NameError: le nom 'bar' n'est pas défini

fstring = f"{foo} \{bar\}"

SyntaxError: la partie d'expression de chaîne f ne peut pas inclure de barre oblique inverse

Résultat désiré:

'test {bar}'

Edit: On dirait que cette question a la même réponse que Comment puis-je imprimer des caractères littéraux entre accolades en python et utiliser également .format dessus? , mais vous ne peut savoir que si vous savez que la fonction de formatage utilise les mêmes règles que la chaîne F. Donc, espérons que cette question a de la valeur pour lier les chercheurs de chaîne f à cette réponse.

33
JDAnders

Bien qu'il y ait une erreur de syntaxe personnalisée de l'analyseur, le même astuce fonctionne comme pour les chaînes régulières.

Utilisez des doubles curlies:

>>> foo = 'test'
>>> f'{foo} {{bar}}'
'test {bar}'

Il est mentionné dans les spécifications ici et les documents ici .

45
wim