2017-07-06 2 views
0

Je fais de l'expérience avec mes premières petites applications, essentiellement des visionneuses de données basées sur Pandas et matplotlib, en utilisant PyQt pour la partie GUI. Ce que je trouve maintenant difficile est de comprendre ce qui ne va pas dans mon code, parce que l'erreur ne se propage pas à la console iPython à partir de laquelle je lance mon script. Il ne fera tout simplement pas ce qui est attendu, mais il n'y a aucune information sur le 'pourquoi'.Comment déboguer des applications basées sur PyQt dans Spyder

Pour corriger des idées, disons que j'ai un bouton qui devrait tracer une certaine courbe sur la toile. S'il y a un échec dans l'opération d'indexation des données, donc rien ne peut être tracée, alors rien n'apparaîtra sur le canevas, mais je n'obtiendrai aucune traceback qui en fait l'index tel et tel ne devait pas être trouvé. L'utilisation du débogueur s'avère également très fastidieuse.

J'ai eu une situation où, pendant l'exécution de mon main(), je pouvais interagir avec le shell IPython et faire des choses comme:

main.my_plot_function() 

dont je recevrais une sortie standard, et voir ce qui ne va pas. Bien que sous-optimale, cela a fait l'affaire.

J'ai dû réinitialiser Spyder ce matin (ne lançait pas sur Windows), et depuis lors, quand je lance mon script, la console ne répond plus. Donc je ne peux plus faire `main.my_plot_function() '.

D'une manière générale, y a-t-il un moyen d'indiquer à Spyder ou à la console que je veux voir ce qui se passe en arrière-plan? Un commutateur "verbeux"?

Répondre

0

Je ne suis pas sûr de ce que vous voulez dire en voulant savoir ce qui se passe en arrière-plan. Je suppose que vous souhaitez savoir à de nombreux points du code, quels sont les types et valeurs de variables et/ou le point d'exécution actuel.

Il y a deux options:

1) Utilisez les instructions d'impression partout où vous avez besoin de savoir ce qui se passe. Par exemple, si vous avez une fonction de tracé, mettez simplement des instructions d'impression dans la fonction pour imprimer les tailles des listes/tableaux à tracer, etc. Vous pouvez également rechercher des fonctions utiles à cet égard, par exemple, type() pour imprimer tapez le type d'une variable pour vous assurer que c'est ce que vous pensez, print (locals()) pour imprimer les noms et les valeurs de toutes les variables locales, etc.

2) Utilisez pdb pour introduire des points de rupture et lancer votre principale script à partir de la ligne de commande. Cela arrêtera l'exécution du script où vous voulez et à partir de la console pdb, vous pouvez inspecter les structures de données. Il y a bien sûr d'autres débogueurs que vous pouvez utiliser, tels que pudb (avec une interface graphique de base et quelques fonctionnalités supplémentaires que pdb).

Il n'y a pas de mode "verbeux" général dans spyder ou tout autre IDE Python que je connaisse.