web-dev-qa-db-fra.com

Python inattendu EOF lors de l'analyse

Voici mon code python. Quelqu'un pourrait-il me montrer ce qui ne va pas?.

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

Et voici ce qui se passe:

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

   ^
SyntaxError: unexpected EOF while parsing
>>> 
63
Web_Designer

Utilisez raw_input au lieu de input :)

Si vous utilisez input, alors les données que vous avez type is est interprété comme un Python Expression qui signifie que vous se retrouver avec gawd sait quel type de objet dans votre variable cible, et un diable d'un large éventail d'exceptions cela peut être généré. Donc tu devrais NOT utilise input à moins que vous ne mettiez quelque chose pour les tests temporaires, à être utilisé que par quelqu'un qui connaît un peu sur les expressions Python.

raw_input renvoie toujours une chaîne parce que, heck, c'est ce que vous avez toujours tapez ... mais alors vous pouvez facilement convertissez-le au type spécifique que vous avez vouloir, et attraper le spécifique exceptions qui peuvent se produire. Espérons que avec cette explication, c'est un pas question de savoir lequel vous devriez utilisation.

Référence

Remarque: ceci ne concerne que Python 2. Pour Python 3, raw_input() est devenu un input() et le python 2 input() a été supprimé.

97
simon

Indente-le! premier. Cela prendrait soin de votre SyntaxError.

En dehors de cela, il y a quelques autres problèmes dans votre programme.

  • Utilisez raw_input lorsque vous souhaitez accepter une chaîne en tant qu'entrée. input prend uniquement les expressions Python et eval sur elles.

  • Vous utilisez certains caractères de 8 bits dans votre script comme . Vous devrez peut-être définir le codage en haut de votre script à l'aide de la ligne # -*- coding:latin-1 -*-, couramment appelée coding-cookie.

  • Aussi, lors de la comparaison str, normalisez les chaînes et comparez-les. (personnes utilisant lower () it) Cela aide à donner peu de souplesse à la saisie de l'utilisateur.

  • Je pense également que la lecture du didacticiel Python pourrait vous être utile. :)

Exemple de code

#-*- coding: latin1 -*-

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

    ....
13
Senthil Kumaran

Alors que la réponse de @ simon est très utile dans Python 2, raw_input n'est pas présent dans Python 3. Je vous suggère de procéder comme suit pour vous assurer que votre code fonctionne aussi bien dans Python 2 que dans Python 3:

Premièrement, pip install future:

$ pip install future

Deuxièmement: importation de future.builtins

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

Et pour l'exemple spécifique mentionné ci-dessus:

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

J'essaie de répondre en général, sans rapport avec cette question, cette erreur se produit généralement lorsque vous cassez une syntaxe en deux et oubliez l'autre moitié. Comme dans mon cas c'était:

try :
 ....

depuis que python cherchait un 

except Exception as e:
 ....

mais il a rencontré un EOF (fin de fichier), d’où l’erreur. Voyez si vous pouvez trouver une syntaxe incomplète dans votre code.

3
Priyank Pathak

J'utilise le code suivant pour obtenir la compatibilité Python 2 et 3

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

J'ai eu cette erreur, à cause d'une parenthèse fermante manquante sur une ligne.

J'ai commencé par avoir un problème avec une ligne disant: invalid syntax (<string>, line ...)? À la fin de mon script.

J'ai supprimé cette ligne, puis j'ai reçu le message EOF.

2
JGFMK

Après la première instruction if au lieu de taper "if", tapez "Elif" et cela devrait fonctionner.

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 `
1
Climberirw

je suis tombé sur la même chose et j'ai compris quel est le problème. Lorsque nous utilisons la méthode input, la réponse à taper doit être entre guillemets doubles. Comme dans votre ligne date=input("Example: March 21 | What is the date? ")

Vous devez taper à l'invite de la console "12/12/2015" - notez le " avant et après. De cette façon, cela prendra une chaîne et le traitera comme prévu. Je ne sais pas s'il s'agit d'une limitation de cette méthode input - mais cela fonctionne de cette façon.

J'espère que ça aide

1
user3607430

Ce que vous pouvez essayer, c’est d’écrire votre code normalement pour python en utilisant la commande normale input Cependant, l'astuce consiste à ajouter au début de votre programme la commande input=raw_input.

Il ne vous reste plus qu'à désactiver (ou activer) selon que vous utilisez Python/IDLE ou Terminal. Vous faites cela en ajoutant simplement '#' si nécessaire.

Désactivé pour une utilisation en Python/IDLE

    #input=raw_input 

Et bien sûr allumé pour une utilisation dans un terminal. 

    input=raw_input 

Je ne sais pas si cela fonctionnera toujours, mais c'est une solution possible pour des programmes simples ou des scripts.

0
joesh