es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de sintaxis de Python 2 al ejecutar el comando print dentro de una expresión booleana.

Con el fin de demostrar que Python realiza acortamiento lógico, intenté ejecutar el siguiente fragmento de código:

python
True or print('aquí')

y esperaba que el código se ejecutara, evaluara como True y no imprimiría "aquí". Sin embargo, Python 2.7 reporta un error de sintaxis:

bash
python2 -c "True or print('aquí')"
File "", line 1
True or print('aquí')
^
SyntaxError: invalid syntax

Python 3 se comporta como esperaba. Si reemplazo “print” con otra función, Python 2.7 también se comporta como se espera.

¿Es esto un error en Python 2.7 debido al soporte de la sintaxis especial print 'cosa' o es este un comportamiento intencional? Cuando la instrucción print aparece como la primera “condición”, el código se ejecuta correctamente en Python 2.7 también.

Versión de Python: Python 2.7.18

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Error de sintaxis de Python 2.7 al utilizar evaluación de cortocircuito con la instrucción print

    Cuando se intenta ejecutar el fragmento de código:

    True or print('aquí')
    

    en Python 2.7, se produce un error de sintaxis:

    python2 -c "True or print('aquí')"
      File "<string>", line 1
        True or print('aquí')
                    ^
    SyntaxError: invalid syntax
    

    Esto se debe a que Python 2.7 admite la sintaxis especial print 'contenido', la cual no es válida en Python 3. Por lo tanto, cuando print se utiliza como parte de una expresión lógica en Python 2.7, se trata como una llamada de función y requiere paréntesis alrededor del argumento.

    Para solucionar este problema, podemos reemplazar print('aquí') con otra llamada de función, o utilizar paréntesis:

    True or (print('aquí'))
    

    Alternativamente, si colocamos print('aquí') como la primera condición en la expresión lógica, Python 2.7 lo ejecuta correctamente:

    print('aquí') or True
    

    Por lo tanto, el comportamiento de Python 2.7 en este caso está previsto y no es un error.

Comments are closed.