8
votes

tkinter python: exceptions attrapantes

Commencer à programmer à Python, je me suis senti à la maison avec son rapport d'erreur. Maintenant que je suis en train de programmer avec Tkinter, je constate que cela arrive souvent qu'il y a des erreurs dans mon programme que je ne remarque pas même si elles génèrent une exception: je les attrape (parfois) juste parce que je vais déboguer étape par Étape (j'utilise Wingide) et par exemple À une ligne donnée, je vois l'exception rapportée. Mais ce qui me gêne, c'est que le programme ne s'arrête pas, mais cela se produit même dans les blocs pas à l'intérieur de l'erreur / erreur.

si ce que j'ai dit n'a aucun sens, connaissez-vous une approche globale pour afficher au moins les erreurs? Être en tkinter, je pourrais créer une fenêtre d'erreur et le remplir avec n'importe quelle exception est en cours de génération, quand cela se produit.


3 Réponses :


9
votes

Voir les réponses à Comment puis-je faire des exceptions silencieuses plus fort Dans tkinter , qui montre comment accrocher un rappel dans tkinter.tk.report_callback_exception .


5 commentaires

Merci pour votre aide, je peux plus ou moins le faire fonctionner. Mais je ne suis pas familier (Programmer Newbie Python) avec la syntaxe @safe, je ne sais donc pas exactement où le mettre dans mon code ... me semble que je dois mettre @safe avant chaque définition de fonction qui devrait Soyez regardé ... c'est tellement?


@alessandro: vous êtes correct. Ce sont appelés décorateurs. Les décorateurs sont du sucre syntaxique pour appeler des classes et des fonctions pouvant envelopper d'autres fonctions.


@Stevenrumbalski J'ai intentionnellement quitté l'importation inchangée. Je n'ai fait que des modifications qui étaient en arrière compatibles avec Python 2.


@Stevenrumbalski Je pensais que l'impression était en avant compatible sans importer d'avenir?


@Stevenvascellaro: Sans l'importation future Imprimer 3 et Imprimer (3) sont identiques, mais Imprimez 1, 2, 3 et Imprimer (1, 2, 3) avoir des sorties de 1 2 3 et (1, 2, 3) , respectivement. Et faire impression (1, fin = '') est une erreur de syntaxe. Un seul argument n'est pas un problème car la parenthèse peut être ignorée. Plusieurs arguments deviennent un tuple parce que les virgules. Je pense que les arguments nommés sont un problème car Python a déjà décidé que imprimer est une déclaration et il n'essaie donc même pas de le regarder comme une fonction.



8
votes

@ @ jochen-ritzel a déclaré ( Devrais-je faire des exceptions silencieuses plus fort dans tkinter? ), il y a tk.tk.report_callback_exception () que vous pouvez remplacer: xxx


0 commentaires

1
votes

Je préfère l'extension explicite du widget de toplevel de TK qui représente principalement la fenêtre principale d'une application au lieu d'injecter un hack: xxx

IMHO semble une bonne façon. < / p>


0 commentaires