Casse-tête Python : lecture d'1 fichier txt bug mais débug avec un problème tkin
Résolu/Fermé
Lecodeurhtmlcss
Messages postés
76
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
24 août 2022
-
Modifié le 23 juil. 2021 à 11:54
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 24 juil. 2021 à 20:01
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 24 juil. 2021 à 20:01
A voir également:
- Casse-tête Python : lecture d'1 fichier txt bug mais débug avec un problème tkin
- Casse-tête avec des allumettes - Télécharger - Jeux vidéo
- Citizen code python avis - Accueil - Outils
- Ecran tele cassé - Forum TV & Vidéo
- Réparation écran tv samsung cassé ✓ - Forum Téléviseurs
6 réponses
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Ambassadeur
1 550
23 juil. 2021 à 12:22
23 juil. 2021 à 12:22
bonjour,
il serait préférable que tu simplifies ton programme pour n'y garder que le minimum qui pose problème.
tu n'expliques pas comment utiliser le programme (en partant de rien) afin d'obtenir le comportement inattendu.
il serait préférable que tu simplifies ton programme pour n'y garder que le minimum qui pose problème.
tu n'expliques pas comment utiliser le programme (en partant de rien) afin d'obtenir le comportement inattendu.
Ton problème vient de l'incompréhension du déroulement de ton code, le code qui suit l'ouverture de ta toplevel ne va pas attendre que celle-ci soit fermée pour être exécuté, il le sera directement.
Il y a tellement de choses à rectifier dans ton code.
Déjà la 1ère ligne, comme dit par le voisin du dessus.
Déjà pourquoi mettre un alias à une lettre d'un module ayant un nom de 2 lettres ?
De plus DirectoryPath étant une constante, on l'écrit en majuscule.
Soit quelque chose comme
Il y a tellement de choses à rectifier dans ton code.
Déjà la 1ère ligne, comme dit par le voisin du dessus.
DirectoryPath=(o.path.abspath(__file__))[0:-27]est erroné et soumis à de futurs bugs.
Déjà pourquoi mettre un alias à une lettre d'un module ayant un nom de 2 lettres ?
De plus DirectoryPath étant une constante, on l'écrit en majuscule.
Soit quelque chose comme
DIRECTORY_PATH = os.path.abspath(os.path.dirname(__file__))qui est déjà plus limpide, ne trouves-tu pas ?
Lecodeurhtmlcss
Messages postés
76
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
24 août 2022
1
23 juil. 2021 à 22:19
23 juil. 2021 à 22:19
Merci beaucoup, c'est vraiment mieux en effet !
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Ambassadeur
1 550
23 juil. 2021 à 15:51
23 juil. 2021 à 15:51
Le soucis principal, c'est ton approche: construire un truc simple et ensuite le complexifier au fur et à mesure.
Comme si tu construisais un abri de jardin pour ensuite le transformer en immeuble à appartement. Al lieu de commencer par les fondations et la structure.
Avant de commencer, tu dois déterminer où tu veux arriver, et commencer en conséquence.
Quel que soit la source de ton soucis, il faudra immanquablement réécrire ton code en le structurant différemment.
Une des preuves de cela, c'est que, au lieu d'expliquer ce que tu attends de ton code (que nous ne pouvons pas deviner), tu nous expliques la logique de ton script, alors que nous pouvons lire le programme, malgré qu'il soit mal commenté.
Comme si tu construisais un abri de jardin pour ensuite le transformer en immeuble à appartement. Al lieu de commencer par les fondations et la structure.
Avant de commencer, tu dois déterminer où tu veux arriver, et commencer en conséquence.
Quel que soit la source de ton soucis, il faudra immanquablement réécrire ton code en le structurant différemment.
Une des preuves de cela, c'est que, au lieu d'expliquer ce que tu attends de ton code (que nous ne pouvons pas deviner), tu nous expliques la logique de ton script, alors que nous pouvons lire le programme, malgré qu'il soit mal commenté.
Allez, d'autres petites choses.
Utiliser des exceptions, c'est très bien, mais il y a aussi un else et finally dans la gestion des exceptions en python, donc plutôt que faire
Fais simplement
Faire
Essaie aussi de respecter les conventions en python (et bien souvent en programmation), soit le snake_case, soit le camelCase, car écrire des noms comme
Comme tu ne fermes pas tes fichiers, utilise à bon escient le context manager with
Essaie aussi de dissocier dans des fonctions distinctes ce qui concerne l'interface garphique et les autres choses, logique, etc.
Utiliser des exceptions, c'est très bien, mais il y a aussi un else et finally dans la gestion des exceptions en python, donc plutôt que faire
fileexist=0 try: o.mkdir("fichier_temporaire") except FileExistsError: fileexist=1 if fileexist==0: # code
Fais simplement
try: o.mkdir("fichier_temporaire") except FileExistsError: # code else: # code
Faire
command=lambda : ecraserfichiertemporaire())est inutile, puisque ta fonction anonyme fait exactement la même chose que la fonction d'origine, donc autant passer la référence à la fonction
ecraserfichiertemporaire(sans parenthèses donc).
Essaie aussi de respecter les conventions en python (et bien souvent en programmation), soit le snake_case, soit le camelCase, car écrire des noms comme
textelabelfichiertemporairesupprimen'aide pas à la lecture du code, c'est vraiment très bien de donner des noms de variables, fonctions descriptives, mais là c'est un peu trop ^^
Comme tu ne fermes pas tes fichiers, utilise à bon escient le context manager with
with open('fichier_a_lire') as f: content = f.read()
Essaie aussi de dissocier dans des fonctions distinctes ce qui concerne l'interface garphique et les autres choses, logique, etc.
Lecodeurhtmlcss
Messages postés
76
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
24 août 2022
1
23 juil. 2021 à 22:23
23 juil. 2021 à 22:23
Je suis sûr que ça va régler pas mal de choses... Je vais en effet restructurer ce code et le rendre plus lisible, merci beaucoup pour ces conseils, ça fait avancer ! Il serait plus judicieux de reconsidérer l'ordre des choses... Merci beaucoup !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Lecodeurhtmlcss
Messages postés
76
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
24 août 2022
1
23 juil. 2021 à 22:38
23 juil. 2021 à 22:38
A vrai dire, le problème ressort plus si on enlève les lignes 85->89
De fait là la seule fonction qui appele "Suiteactivation" est bien celle du bouton "supprimer" de la fenetre popup. On clique, mais malheureusement a position est illisible.
else: print("il y a un monde courant ! son nom est : ",mondecourant) pathmonde=o.path.join(DirectoryPath,mondecourant) suite=SuiteActivation() !
De fait là la seule fonction qui appele "Suiteactivation" est bien celle du bouton "supprimer" de la fenetre popup. On clique, mais malheureusement a position est illisible.
Lecodeurhtmlcss
Messages postés
76
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
24 août 2022
1
23 juil. 2021 à 22:56
23 juil. 2021 à 22:56
Vidéo explicative ici : https://drive.google.com/file/d/1WnY_2ib-23qzICMeTb1N0-GJRNiT2fO5/view?usp=sharing
C'est mieux ! Et merci de votre aide et implication !
C'est mieux ! Et merci de votre aide et implication !
Modifié le 23 juil. 2021 à 12:45
Désolé pour la non-explication ! Oui il faut juste lancer le programme 2 fois. La première il n'y aura aucun monde temporaire et normalement il ne se passera rien. C'est une fois qu'il y en a un que ça marche.
23 juil. 2021 à 12:48
ton programme est visiblement prévu pour un scenario bien précis, et se termine en erreur si on ne suit pas ce scenario.
n'hésite pas non plus à expliquer ce que le programme affiche dans ce scénario.
23 juil. 2021 à 13:07
23 juil. 2021 à 13:13
Modifié le 23 juil. 2021 à 22:25
J'eplicite mal mon but : j'essaie de supprimer les infos pour en remettre de nouvelles, et ensuite réussir à lire ces infos depuis le fichier texte "options.txt"
Ce processus se traduit par cliquer sur "supprimer" sur la fenêtre popup - mais on voit que dans la console on n'arrive pas à récupérer les informations (juste une liste vide). En fait ce n'est que supprimer la fenêtre principale qui fait fonctionner le script après ces différentes manips.
Et j'essaie de comprendre pourquoi (et surtout de trouver un moyen de récupérer les options du fichier texte correctement sans fermer la fenetre principale.