IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

EOFError : Ran out of input


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2023
    Messages : 6
    Par défaut EOFError : Ran out of input
    Bonjour,
    Je suis tombé sur l'erreur 'EOFError : Ran out of input' en essayant d'ouvrir un fichier de sauvegarde. J'ai donc fait quelques recherches sur internet pour tenter de résoudre mon problème, mais je n'ai vu ça nul part : mon fichier n'est pas vide et je l'ouvre en mode 'rb', mais l'erreur est là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import os
     
    scores = {}
     
    if os.path.getsize("sauvegarde") > 0:
        fichier = open("sauvegarde","rb").read()
        print(fichier) #à mettre en commentaire si besoin
        liste = pickle.load(fichier) #inutile avec un read()
        fichier.close()

    Le cas sans read()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <_io.BufferedReader name='listeNombrePremier'>
    Traceback (most recent call last):
      File "C:\Users\phili\OneDrive\Bureau\fermat mersenne\fermat.py", line 56, in <module>
        liste = pickle.load(fichier)
    EOFError: Ran out of input
    Le cas avec read()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    b'\x80\x04\x95\x04\x00\x01\x00\x00\x00\x00\x00]\x94(K\x02K\x03K\x05K\x...
    Traceback (most recent call last):
      File "C:\Users\phili\OneDrive\Bureau\fermat mersenne\fermat.py", line 56, in <module>
        liste = pickle.load(fichier)
    TypeError: file must have 'read' and 'readline' attributes

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 175
    Par défaut
    Hello,
    un nom de fichier sans le chemin complet c'est un peu risqué si on ne sais pas le répertoire courant actuel. De même un nom de fichier sans extension cela ne se fait généralement pas.
    Ami calmant, J.P

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 670
    Par défaut
    Salut,

    Le "EOFError: Ran out of input" c'est qu'on essaie de lire après la fin du fichier (donc qu'on l'a lu avant de passer le descripteur à pickle).
    Pour "TypeError: file must have 'read' and 'readline' attributes", c'est quand fichier contient la suite de bytes lus: ce n'est pas un objet de type file et... ça n'a pas les méthodes .read et .readline.

    Citation Envoyé par MAI2Phil
    mais je n'ai vu ça nul part : mon fichier n'est pas vide et je l'ouvre en mode 'rb', mais l'erreur est là.
    Essayez de comprendre le code que vous écrivez et lorsque ça ne fonctionne pas: relire la documentation et chercher sur Internet des cas similaires... c'est votre boulot!

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2023
    Messages : 6
    Par défaut
    Bonjour jurassic,
    Honnêtement, j'ai l'impression que tu ne connais pas le module pickle que j'utilise ici. C'est un module qui transforme une variable quelconque en une suite d'octets avec la fonction dump(variable,fichier_cible) et qui met cette suite d'octets dans un fichier binaire. Et cette fonction ne marche que si le fichier cible est un fichier binaire que tu dois avoir ouvert au préalable ! Ensuite, la fonction load(fichier_source) (celui dans lequel on écrit avec la fonction dump()) retransforme la suite d'octets en une variable interprétable par Python. Je ne sais pas quelle est le type d'un fichier binaire mais quand je vais dans mon explorateur de fichiers et que je regarde les propriétés du fichier, il me met Fichier comme type du fichier.
    J'ai oublié de le préciser dans mon message initial mais j'importe le module pickle au tout début du programme, qui n'est pas ici.
    Enfin, les deux fichiers (le code et la sauvegarde) sont dans le même répertoire et c'est même fait exprès.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 175
    Par défaut
    moi je faisais juste une remarque d'ordre générale concernant ton problème voir la réponse de wiztricks

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2023
    Messages : 6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    donc qu'on l'a lu avant de passer le descripteur à pickle
    Je n'ai pas compris ce que tu as voulu dire par là, est-ce que tu peux m'expliquer ?

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 670
    Par défaut
    Citation Envoyé par MAI2Phil Voir le message
    Je n'ai pas compris ce que tu as voulu dire par là, est-ce que tu peux m'expliquer ?
    Vous expliquer quoi?
    Il vous suffit de lancer l'interpréteur et de tester.
    Je crée un fichier pickle avec un dico dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> f = open('test.dat', 'wb')
    >>> pickle.dump(dict(a=1, b=2), f)
    >>> f.close()
    >>>
    Puis je fais exécuter à Python le n'importe quoi qui va bien pour reproduire vos erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> f = open('test.dat', 'rb')
    >>> data = f.read()
    >>> pickle.load(f)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    EOFError: Ran out of input
    >>> pickle.load(data)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: file must have 'read' and 'readline' attributes
    >>>
    Après si je veux récupérer mon dict à cet endroit là, je peux utiliser .loads:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> pickle.loads(data)
    {'a': 1, 'b': 2}
    >>>
    ou rembobiner le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> f.seek(0)
    0
    >>> pickle.load(f)
    {'a': 1, 'b': 2}
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2023
    Messages : 6
    Par défaut
    Justement, je n'avais pas de read() au départ. Au départ, j'avais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fichier = open("sauvegarde","rb")
    liste = pickle.load(fichier)
    fichier.close()
    Donc je ne comprends absolument pas pourquoi ça me met cette erreur.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 793
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par MAI2Phil Voir le message
    Justement, je n'avais pas de read() au départ.
    On ne sait absolument rien de ce que tu avais au départ.
    Toutefois si on combine ton code d'aujourd'hui avec un fichier correctement écrit (en prenant par exemple pour cette partie le code de wiztricks)...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> import pickle
    >>> with open("svg.dat", "wb") as fp: pickle.dump({1 : "xxx", 2 : "yyy"}, fp)
    ... 
    >>> with open("svg.dat", "rb") as fp: d=pickle.load(fp)
    ... 
    >>> print(d, type(d))
    {1: 'xxx', 2: 'yyy'} <class 'dict'>
    >>>
    ... ça fonctionne parfaitement.

    Citation Envoyé par MAI2Phil Voir le message
    Donc je ne comprends absolument pas pourquoi ça me met cette erreur.
    Nous non plus. Mais sans ton code d'origine complet dans lequel tu 1) écris le fichier et 2) tente de le relire et 3) qui reproduit l'erreur on ne pourra pas en dire beaucoup plus.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 670
    Par défaut
    Citation Envoyé par MAI2Phil Voir le message
    Justement, je n'avais pas de read() au départ. Au départ, j'avais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fichier = open("sauvegarde","rb")
    liste = pickle.load(fichier)
    fichier.close()
    Donc je ne comprends absolument pas pourquoi ça me met cette erreur.
    Ce que vous aviez au départ est correct.
    Après si vous ne savez pas trop pourquoi/comment un read est arrivé dans ce code...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. ERROR 2008 (HY000): MySQL client ran out of memory
    Par rezguiinfo dans le forum Administration
    Réponses: 9
    Dernier message: 30/07/2012, 15h53
  2. Différences entre a.out et *.com ???
    Par Thcan dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 25/02/2003, 21h36
  3. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  4. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 17h37
  5. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo