Python EOF inesperado durante el análisis

Aquí está mi código de python. ¿Podría alguien mostrarme qué tiene de malo?

while 1: date=input("Example: March 21 | What is the date? ") if date=="June 21": sd="23.5° North Latitude" if date=="March 21" | date=="September 21": sd="0° Latitude" if date=="December 21": sd="23.5° South Latitude" if sd: print sd 

Y esto es lo que pasa:

 >>> Example: March 21 | What is the date? Traceback (most recent call last): File "C:\Users\Daniel\Desktop\Solar Declination Calculater.py", line 2, in  date=input("Example: March 21 | What is the date? ") File "", line 0 ^ SyntaxError: unexpected EOF while parsing >>> 

Utilice raw_input lugar de input 🙂

Si usa la input , entonces los datos que escribe se interpretan como una expresión de Python, lo que significa que terminará con gawd que sabe qué tipo de objeto en su variable objective y una gran cantidad de excepciones que pueden generarse. Por lo tanto, NO debe usar la input menos que esté poniendo algo en pruebas temporales, para que solo lo use alguien que sepa un poco acerca de las expresiones de Python.

raw_input siempre devuelve una cadena porque, diablos, eso es lo que siempre escribe … pero luego puede convertirla fácilmente al tipo específico que desee, y detectar las excepciones específicas que pueden ocurrir. Esperemos que con esa explicación, no hay que pensar con claridad en cuál debería usar.

Referencia

Nota: esto es solo para Python 2. Para Python 3, raw_input() ha convertido en input() simple input() y la input() Python 2 input() se ha eliminado.

Sangrarlo! primero. Eso cuidaría de su SyntaxError .

Aparte de eso, hay un par de otros problemas en su progtwig.

  • Use raw_input cuando quiera aceptar la cadena como una entrada. input solo toma expresiones de Python y realiza una eval sobre ellas.

  • Está utilizando ciertos caracteres de 8 bits en su script como . Es posible que deba definir la encoding en la parte superior de su secuencia de comandos utilizando # -*- coding:latin-1 -*- línea llamada comúnmente como encoding-cookie.

  • Además, al hacer la comparación de cadenas, normalice las cadenas y compare. (personas que lo usan con menos frecuencia) Esto ayuda a dar poca flexibilidad con las aportaciones del usuario.

  • También creo que leer el tutorial de Python puede ser útil para ti. 🙂

Código de muestra

 #-*- coding: latin1 -*- while 1: date=raw_input("Example: March 21 | What is the date? ") if date.lower() == "march 21": .... 

Si bien la respuesta de @ simon es más útil en Python 2, raw_input no está presente en Python 3. Yo sugeriría hacer lo siguiente para asegurarse de que su código funcione igual de bien en Python 2 y Python 3:

Primero, instale el futuro:

 $ pip install future 

Segundo: importar entrada de future.builtins

 # my_file.py from future.builtins import input str_value = input('Type something in: ') 

Y para el ejemplo específico listado arriba:

 # example.py from future.builtins import input my_date = input("Example: March 21 | What is the date? ") 

Intento responder en general, no relacionado con esta pregunta, este error generalmente ocurre cuando rompes una syntax a la mitad y olvidas la otra mitad. Como en mi caso fue:

 try : .... 

ya que Python estaba buscando una

 except Exception as e: .... 

pero encontró un EOF (Fin del archivo), de ahí el error. Vea si puede encontrar alguna syntax incompleta en su código.

Estoy usando el siguiente código para obtener compatibilidad con Python 2 y 3

 if sys.version_info < (3, 0): input = raw_input 

Tuve este error, debido a un paréntesis de cierre faltante en una línea.

Comencé a tener un problema con una línea que decía: invalid syntax (, line ...)? al final de mi guión.

Borre esa línea, luego recibí el mensaje EOF.

Me encontré con lo mismo y me di cuenta de cuál es el problema. Cuando usamos el método input, la respuesta que deberíamos escribir debe estar entre comillas dobles. Al igual que en su línea date=input("Example: March 21 | What is the date? ")

Debe escribir cuando se le solicite en la consola “12/12/2015”: anote la " cosa antes y después. De esta manera, tomará eso como una cadena y la procesará como se esperaba. No estoy seguro de si esto es una limitación de este método de input – Pero funciona de esta manera.

Espero eso ayude

Después de la primera instrucción if, en lugar de escribir “if”, escriba “elif” y luego debería funcionar.

Ex.

 ` while 1: date=input("Example: March 21 | What is the date? ") if date=="June 21": sd="23.5° North Latitude elif date=="March 21" | date=="September 21": sd="0° Latitude" elif date=="December 21": sd="23.5° South Latitude" elif sd: print sd ` 

Lo que puede intentar es escribir su código de forma normal para python usando el comando de input normal. Sin embargo, el truco es agregar al comienzo de la progtwigción del comando input=raw_input .

Ahora todo lo que tiene que hacer es deshabilitar (o habilitar) dependiendo de si está ejecutando en Python / IDLE o Terminal. Para ello, simplemente agregue ‘#’ cuando sea necesario.

Apagado para su uso en Python / IDLE

  #input=raw_input 

Y por supuesto encendido para su uso en terminal.

  input=raw_input 

No estoy seguro de si siempre funcionará, pero es una posible solución para progtwigs o scripts simples.

Compruebe si todos los parámetros de las funciones están definidos antes de llamarlos. Me enfrenté a este problema mientras practicaba Kaggle.