Problème avec pickle
SolooslO
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour !
J'ai un problème avec le script en python que je vous joins au-dessous. J'utilise Visual Studio Code pour coder, et quand j'exécute ce code dans l'application, ça marche. Mais pas quand je l'ouvre seul... Je ne comprends pas.
J'ai identifié que le problème venait du module
J'ai au préalable exécuté la commande :
... on m'a dit que cela avait été exécuté avec succès. Seulement, ça ne marche pas quoi... ????
Est-ce que j'ai installé le mauvais module ? Ou je ne sais pas trop quoi ?
Merci d'avance à tous ceux qui pourraient éclairer ma lanterne !
????????????
J'ai un problème avec le script en python que je vous joins au-dessous. J'utilise Visual Studio Code pour coder, et quand j'exécute ce code dans l'application, ça marche. Mais pas quand je l'ouvre seul... Je ne comprends pas.
J'ai identifié que le problème venait du module
pickle(j'ai enlevé toutes ses apparitions et son importation et ça a marché).
J'ai au préalable exécuté la commande :
pip install pickle4
... on m'a dit que cela avait été exécuté avec succès. Seulement, ça ne marche pas quoi... ????
Est-ce que j'ai installé le mauvais module ? Ou je ne sais pas trop quoi ?
Merci d'avance à tous ceux qui pourraient éclairer ma lanterne !
????????????
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
as-tu un message d'erreur quand cela ne marche pas? ce message a pour but d'aider à identifier de quelle erreur il s'agit.
avant de l'ouvrir dans un autre environnement Python que VSCode, as-tu également importé le module dans cet autre environment?
as-tu un message d'erreur quand cela ne marche pas? ce message a pour but d'aider à identifier de quelle erreur il s'agit.
avant de l'ouvrir dans un autre environnement Python que VSCode, as-tu également importé le module dans cet autre environment?
Non je n'ai pas de message d'erreur, l'interface s'ouvre et se referme instantanément. Je ne connais pas trop en revanche le nom de l'autre environnement que j'utilise, c'est celui par défaut (quand on double-clique sur un fichier .py)
Bonjour,
j'ai un problème avec le script en python que je vous joins au-dessous
il est où ton code ???????
Peux-tu l'afficher avec les balises Python ?
Mode d'emploi : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ceci dit, moi, j'utilise pickle sans l'avoir jamais installé (pip install ....), il est de base dans l'environnement Python
j'ai un problème avec le script en python que je vous joins au-dessous
il est où ton code ???????
Peux-tu l'afficher avec les balises Python ?
Mode d'emploi : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ceci dit, moi, j'utilise pickle sans l'avoir jamais installé (pip install ....), il est de base dans l'environnement Python
import pickle with open('pick.pkl','wb') as fo: pickle.dump(n, fo) etc ...
Le voilà, mon code, désolé
~(>_<。)\
~(>_<。)\
from operator import index import os import os.path from time import sleep import pickle import random choix_menu = "" mot_de_passe_entré = "" choix_jeu_élève = "" quit_élève = "" change_mot_de_passe_un = "" change_mot_de_passe_deux = "" mdp="" mots_prof = [] mots_run = [] mots_faux = [] with open("mots.dat", "rb") as x: mots_prof = pickle.load(x) x.close() while 1==1 : choix_menu1 = False while choix_menu1 == False : os.system ("cls") print("\t\t\tMenu :\n") print("Où voulez-vous vous rendre ?") print("-Espace élève") print("-Espace enseignant\n") choix_menu = str(input("Espace : ")) if choix_menu == "élève" or choix_menu == "eleve" or choix_menu == "Elève" or choix_menu == "Eleve" or choix_menu == "ELEVE" : os.system("cls") print("\t\t\tEspace élève :\n") print("Bienvenue dans l'espace élève.") sleep(2) choix_élève1 = False while choix_élève1 == False : os.system("cls") print("\t\t\tEspace élève :\n") choix_jeu_élève = str(input("Voulez-vous lancer une partie de Vocabulary Tester ?\n")) if choix_jeu_élève == "Oui" or choix_jeu_élève == "oui" or choix_jeu_élève == "OUI" : os.system("cls") print("\t\t\tEspace élève :\n") print("Attention, la partie démarre dans...") aide_départ = 4 for loop in range (3) : aide_départ = aide_départ - 1 print(aide_départ) sleep(0.25) os.system("cls") print("\t\t\tEspace élève :\n") print("Attention, la partie démarre dans...") print(aide_départ,".") sleep(0.25) os.system("cls") print("\t\t\tEspace élève :\n") print("Attention, la partie démarre dans...") print(aide_départ,"..") sleep(0.25) os.system("cls") print("\t\t\tEspace élève :\n") print("Attention, la partie démarre dans...") print(aide_départ,"...") sleep(0.25) os.system("cls") print("\t\t\tEspace élève :\n") print("Attention, la partie démarre dans...") print ("C'est parti !") sleep(1) mots_run = mots_prof while len(mots_run) != 0: choose = 2*(random.randint(1,(len(mots_run)/2))-1) os.system("cls") print("\t\t\tEspace élève :\n") answer = str(input("Comment dit-on \"" + mots_run[choose + 1] + "\" en anglais ?\nCela se dit (tout écrire en minuscules) : ")) if answer == mots_run[choose]: print("\nBravo, c'est ça !") del mots_run[choose] del mots_run[choose] sleep(1) else : print("\nNon, c'est \"" + mots_run[choose] + "\". Dommage...") if not mots_run[choose] in mots_faux : mots_faux.append(mots_run[choose]) sleep(2) temo = 1 help_error = str(mots_faux[0]) for loop in range(len(mots_faux) - 1): help_error = (help_error + ", " + (str(mots_faux[temo]))) temo += 1 os.system("cls") print("\t\t\tEspace élève :\n") print("Tu as fini !\nMais tu t'es trompé sur les mots " + help_error + "...") sleep(5) elif choix_jeu_élève == "Non" or choix_jeu_élève == "non" or choix_jeu_élève == "NON" : os.system("cls") quit_élève1 = False while quit_élève1 == False : print("\t\t\tEspace élève :\n") quit_élève = str(input("Voulez-vous quitter l'espace élève ?\n")) if quit_élève == "oui" or quit_élève == "Oui" or quit_élève == "OUI" : choix_élève1 = True quit_élève1 = True elif quit_élève == "non" or quit_élève == "Non" or quit_élève == "NON" : choix_élève1 = False quit_élève1 = True else : os.system("cls") print("\t\t\tEspace élève :\n") print("Mauvais choix. Répondez en un mot.") sleep(2) os.system("cls") else : os.system("cls") print("\t\t\tEspace élève :\n") print("Mauvais choix. Répondez en un mot.") sleep(2) os.system("cls") elif choix_menu == "enseignant" or choix_menu == "Enseignant" or choix_menu == "ENSEIGNANT" : os.system("cls") f = open("mdp.dat",'r') mot_de_passe_prof=str(f.readline()) f.close() mot_de_passe_entré = str(input("Entrez le mot de passe.\n")) if mot_de_passe_entré == mot_de_passe_prof : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Bienvenue dans l'espace enseignant.") sleep(2) quit_enseignant1 = False while quit_enseignant1 == False : choix_enseignant1 = False while choix_enseignant1 == False : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Que voulez-vous faire ?") print("-Ajouter un mot (1)") print("-Supprimer un mot (2)") print("-Changer le mot de passe (3)") print("-Quitter l'espace enseignant (4)") choix_enseignant = str(input("Répondez avec un chiffre.\n")) if choix_enseignant == "un" or choix_enseignant == "Un" or choix_enseignant == "UN" or choix_enseignant == "1" : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Vous allez ajouter un mot.") sleep(2) os.system("cls") print("\t\t\tEspace enseignant :\n") with open("mots.dat", "rb") as x: mots_prof = pickle.load(x) x.close() mot_f_add = str(input("Quel mot souhaitez-vous ajouter en français ?\nMot français (tout en minuscules) : ")) if not mot_f_add in mots_prof : mot_a_add = str(input("\nComment de traduit-il en anglais ?\nTraduction (tout en minuscules) : ")) mots_prof.append(mot_a_add) mots_prof.append(mot_f_add) print("Vous avez ajouté le mot \"" + mot_f_add + "\", traduit par \"" + mot_a_add + "\".") with open("mots.dat", "wb") as x: pickle.dump(mots_prof, x) x.close() sleep(3) choix_enseignant1 = True else : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Le mot \"" + mot_f_add + "\" français a déjà été ajouté.") sleep(3) os.system("cls") elif choix_enseignant == "deux" or choix_enseignant == "DEUX" or choix_enseignant == "Deux" or choix_enseignant == "2" : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Vous allez supprimer un mot.") sleep(2) os.system("cls") print("\t\t\tEspace enseignant :\n") word_to_delete = str(input("Quel mot français souhaitez-vous supprimer ?\nMot français (en minuscules) : ")) if word_to_delete in mots_prof: place_word_to_delete = mots_prof.index(word_to_delete) mots_prof.pop(place_word_to_delete + 1) mots_prof.pop(place_word_to_delete) os.system("cls") print("\t\t\tEspace enseignant :\n") print("Vous venez de supprimer le mot \"" + word_to_delete + "\".") with open("mots.dat", "wb") as x: pickle.dump(mots_prof, x) x.close() sleep(3) choix_enseignant1 = True else : print("Le mot \"" + word_to_delete + "\" français n'est pas référencé.") sleep(2) os.system("cls") elif choix_enseignant == "trois" or choix_enseignant == "TROIS" or choix_enseignant == "Trois" or choix_enseignant == "3" : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Vous allez changer votre mot de passe.") sleep(2) os.system("cls") print("\t\t\tEspace enseignant :\n") change_mot_de_passe_un = str(input("Saisissez votre nouveau mot de passe :\n")) os.system("cls") print("\t\t\tEspace enseignant :\n") change_mot_de_passe_deux = str(input("Confirmez votre nouveau mot de passe :\n")) if change_mot_de_passe_un == change_mot_de_passe_deux: print(change_mot_de_passe_un) mdp=str(change_mot_de_passe_un) f = open("mdp.dat",'w') f.write(change_mot_de_passe_un) f.close() os.system("cls") print("Votre mot de passe a bien été changé en \"" + change_mot_de_passe_un + "\".") sleep(2) else : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Aïe... Les deux mots de passe sont différents.") sleep(2) os.system("cls") choix_enseignant1 = True os.system("cls") elif choix_enseignant == "quatre" or choix_enseignant == "QUATRE" or choix_enseignant == "Quatre" or choix_enseignant == "4" : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Au plaisir de vous revoir.") sleep(2) choix_enseignant1 = True quit_enseignant1 = True os.system("cls") else : os.system("cls") print("\t\t\tEspace enseignant :\n") print("Mauvais choix. Veuillez répondre avec le chiffre correspondant au choix et non pas un mot.") sleep(4) choix_enseignant1 = False os.system("cls") else : os.system("cls") print("Le mot de passe est incorrect.") sleep(2) os.system("cls") else : os.system("cls") print("\t\t\tMenu :\n") print ("Mauvais choix. Veillez à ne pas commettre de faute d'orthographe.") sleep(1) print("Répondez en un seul mot.") sleep(2) os.system("cls")
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Plusieurs recommandations :
Copie-colle nous le résultat de ce programme (dans et en dehors de visual studio).
Bonne chance
Plusieurs recommandations :
- essaye de faire un exemple minimal qui reproduit le problème (voir ci-dessous);
- indique l'erreur (le message d'erreur complet, pour savoir à quelle ligne ça plante et pourquoi) ;
- compare le module
pickle
importé (en affichantsys.path
, voir code ci-dessous): normalementpickle
est de base et donc tu ne devrais rien avoir à installer avecpip
; - vu que tu sembles manipuler des listes de chaînes de caractères,
pickle
suffit, mais sache que pour des structures de données plus évoluées il faudrait utiliserdill
; - je te déconseille très fortement les caractères spéciaux (notamment les caractères accentués dans tes noms de variables) surtout si tu ne mets pas le header
# -*- coding: utf-8 -*-
en début de fichier (voir par exemple cette page).
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import pickle, sys, traceback print(sys.path) mots = ["mot1", "mot2", "mot3"] try: with open("mots.dat", "wb") as f: pickle.dump(mots, f) except: print(traceback.format_exc(), sys.stderr) print(mots) try: with open("mots.dat", "rb") as f: mots = pickle.load(f) except: print(traceback.format_exc(), sys.stderr) print(mots)
Copie-colle nous le résultat de ce programme (dans et en dehors de visual studio).
Bonne chance
Voilà ce que j'obtiens sur Python 3.9
Et sur Visual Studio Code...
Je ne comprends pas pourquoi...
Python 3.9.12 (tags/v3.9.12:b28265d, Mar 23 2022, 23:52:46) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> #!/usr/bin/env python3
>>> # -*- coding: utf-8 -*-
>>>
>>> import pickle, sys, traceback
>>>
>>> print(sys.path)
['', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\python39.zip', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\DLLs', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\lib', 'C:\\Users\\lucas\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\lib\\site-packages']
>>> mots = ["mot1", "mot2", "mot3"]
>>>
>>> try:
... with open("mots.dat", "wb") as f:
... pickle.dump(mots, f)
... except:
... print(traceback.format_exc(), sys.stderr)
... print(mots)
File "<stdin>", line 6
print(mots)
^
SyntaxError: invalid syntax
>>>
>>> try:
... with open("mots.dat", "rb") as f:
... mots = pickle.load(f)
... except:
... print(traceback.format_exc(), sys.stderr)
... print(mots)
File "<stdin>", line 6
print(mots)
^
SyntaxError: invalid syntax
>>>
Et sur Visual Studio Code...
Windows PowerShell
Copyright (C) Microsoft Corporation. Tous droits réservés.
Testez le nouveau système multiplateforme PowerShell https://aka.ms/pscore6
PS C:\Users\lucas\Downloads> & 'C:\Users\lucas\AppData\Local\Microsoft\WindowsApps\python3.10.exe' 'c:\Users\lucas\.vscode\extensions\ms-python.python-2022.4.1\pythonFiles\lib\python\debugpy\launcher' '62079' '--' 'c:\Users\lucas\Downloads\Untitled-1.py'
['c:\\Users\\lucas\\Downloads', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\python310.zip', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\DLLs', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\lib', 'C:\\Users\\lucas\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0', 'C:\\Users\\lucas\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0', 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\lib\\site-packages']
['mot1', 'mot2', 'mot3']
['mot1', 'mot2', 'mot3']
PS C:\Users\lucas\Downloads>
Je ne comprends pas pourquoi...
Pour l'erreur de syntaxe : je pense que tu as eu un problème de copier coller. Le mieux serait de copier coller le bout de code que je t'ai donné dans un fichier (mettons
Ensuite la différence de comportement s'explique par
Cela suffit à expliquer pourquoi le comportement n'est pas le même. Cela semble dû à la coexistence de deux installations de python : VS utilise
Bonne chance
toto.py) puis que tu exécutes
python toto.py.
Ensuite la différence de comportement s'explique par
sys.pathqui n'est pas défini de la même manière dans python et dans VS. Si on compare ces deux listes, on voit qu'elles sont différentes : ci-dessous
- la première colonne indique si le chemin indiqué en 3e colonne est dans
sys.path
pourpython3.9
; - la seconde colonne indique si le chemin indiqué en 3e colonne est dans
sys.path
pour VS ;
True False '' False True 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0' False True 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\DLLs' False True 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\lib' False True 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\lib\\site-packages' False True 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_3.10.1264.0_x64__qbz5n2kfra8p0\\python310.zip' True False 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0' True False 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\DLLs' True False 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\lib' True False 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\lib\\site-packages' True False 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_3.9.3312.0_x64__qbz5n2kfra8p0\\python39.zip' False True 'C:\\Users\\lucas\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0' True False 'C:\\Users\\lucas\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0' False True 'C:\\Users\\lucas\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages' False True 'c:\\Users\\lucas\\Downloads'
Cela suffit à expliquer pourquoi le comportement n'est pas le même. Cela semble dû à la coexistence de deux installations de python : VS utilise
python3.10tandis que tu utilises manuellement
python3.9.
Bonne chance