Tengo esta llamada api.
payload = "{\\"weight\\":{\\"value\\":\\"85.00\\",\\"unit\":\\"kg\\"},\\"height\\":{\\"value\\":\\"170.00\\",\\"unit\\":\\"cm\\"},\\"sex\\":\\"m\\",\\"age\\":\\"24\\",\\"waist\\":\\"34.00\\",\\"hip\\":\\"40.00\\"}"Quiero usar una cadena af para cambiar esos valores, pero aparece un error de sintaxis que dice que no puedo usar una barra invertida para cadenas f. ¿Que puedo hacer?
Esta es actualmente una limitación de f-strings en python. Las barras diagonales inversas no están permitidas en absoluto (ver https://mail.python.org/pipermail/python-dev/2016-August/145979.html )
Opción 1
La mejor manera sería usar str.format() para lograr esto, según https://docs.python.org/3/library/stdtypes.html#str.format
opcion 2
Si está muy interesado en usar barras invertidas, podría hacer algo como esto:
backslash_char = "\\" my_string = f"{backslash_char}foo{bar}"Pero probablemente esa no sea la mejor manera de hacer que su código sea legible para otras personas.
Opción 3
Si está absolutamente seguro de que nunca usará un carácter en particular, también puede poner ese carácter como marcador de posición, algo como
my_string = f"🍔foo{bar}".replace("🍔", "\\")Pero eso también es una solución súper alternativa. Y es una excelente manera de introducir errores en el camino, si alguna vez recibe una entrada con ese carácter.
Opción 4
Como se menciona en los comentarios de esta respuesta, otra opción sería hacer chr(92) dentro de algunos curlies, como se muestra a continuación:
my_string = f"This is a backslash: {chr(92)}"class data(object): _weight = 85.00 _height = 170.00 _sex = 'm' _age = '24' _waist = 34.0 _hip = 40.0 payload = f'\ {{\ "weight": {{\ "value": "{data._weight}",\ "unit": "kg"\ }},\ "height": {{\ "value": "{data._height}",\ "unit": "cm"\ }},\ "sex": "{data._sex}",\ "age": "{data._age}",\ "waist": "{data._waist}",\ "hip": "{data._hip}"\ }}' print(payload)Resultado:
C:\>python.exe prueba.py
{ "peso": { "valor": "85,00", "unidad": "kg" }, "altura": { "valor": "170,00", "unidad": "cm" }, "sexo": " m", "edad": "24", "cintura": "34,0", "cadera": "40,0" }Resultado a través de 'jq' : (consulte aquí para obtener información sobre 'jq')
C:\>python.exe prueba.py | jq
{
"peso": {
"valor": "85,00",
"unidad": "kg"
},
"altura": {
"valor": "170,00",
"unidad": "cm"
},
"sexo": "m",
"edad": "24",
"cintura": "34.0",
"cadera": "40.0"
}