2017-10-19 8 views
0

J'ai remarqué que si j'exécute le même morceau de code Python 3 dans PyCharm, l'onglet "Exécuter" affichera parfois le message de trace et d'erreur, mais d'autres fois affichera "Processus terminé avec le code de sortie 1" .PyCharm Run --- pourquoi affiche-t-il parfois un retraçage et une erreur et parfois non?

1) Quelqu'un peut-il expliquer pourquoi cela se produit? 2) Existe-t-il un moyen de forcer PyCharm à toujours afficher le traçage complet et le message d'erreur?

Editer: Voici un exemple qui montre le comportement que j'ai vu. Quand j'ai couru cela 20 fois, j'ai eu le traceback et l'erreur deux fois et le message "exit code 1" par lui-même 18 fois. Afin de voir ce comportement, le code semble avoir besoin d'être occupé à imprimer quelque chose avant que l'exception ne soit levée. Si je lève seulement l'exception (sans l'appel callme()) je reçois toujours le traceback et l'erreur.

#!/usr/bin/python3 

def callme(): 
    print('doing some stuff!') 

def main(): 
    for i in range(1,100): 
     callme() 
    raise Exception('Something is went wrong!') 

if __name__ == '__main__': 
    main() 

Édition 2: Je viens de me rendre compte que la réponse à cela doit probablement être. La fenêtre d'affichage de PyCharm Run ne montre qu'un certain nombre de lignes. Si le nombre de lignes imprimables est inférieur à la quantité de documents que j'imprime, certaines lignes ne s'afficheront pas. Donc, en réalité, les lignes de retraçage sont toujours là, mais elles ont juste été imprimées avant certaines autres sorties et ne sont donc pas visibles dans la fenêtre. J'ai découvert que je peux réellement sauter jusqu'à eux (même s'ils ne sont pas visibles) en appuyant sur le petit bouton haut à côté de la fenêtre Exécuter.

Edit 3: On dirait que je ne suis pas la seule personne qui a eu ce problème: PyCharm output error messages interspersed with console output. How to fix this?

Selon cette question, il a obtenu rapporté comme un bogue (https://youtrack.jetbrains.com/issue/PY-16143), mais (aussi loin que possible dire) il n'a pas été réparé. Des idées sur la façon de contourner cela?

Pour ceux qui ont demandé: J'utilise PyCharm Community Edition 2016.3.2 et mon système d'exploitation est CentOS 6.6.

+0

[mcve] (https: // stackoverflow.com/help/mcve) peut aider à répondre –

+0

Vous devez spécifier des choses comme l'OS sur lequel vous vous trouvez. Aussi, avez-vous essayé d'exécuter le script directement à partir de la ligne de commande au lieu d'utiliser PyCharm avec 'python3 file.py'? – Nifled

+0

Merci @ElRuso, ce qui m'a aidé à comprendre ce qui se passait! – EPH

Répondre

1

Je peux confirmer ce comportement sur Ubuntu 16.04 PyCharm 03/02/2017
Si vous voulez voir la pile trace chaque fois, essayez ce code et de toute façon :) stop using print for debugging

import logging 

def callme(): 
    logging.info('doing some stuff!') 

def main(): 
    for i in range(1,100): 
     callme() 
    raise Exception('Something is went wrong!') 

if __name__ == '__main__': 
    logging.basicConfig(level='INFO') 
    main() 
+0

J'ai testé cette solution et cela fonctionne dans ma version de PyCharm. Je ne savais même pas qu'il y avait une bibliothèque de journalisation! Cela semble certainement beaucoup mieux que d'imprimer partout. Je vous remercie! – EPH