Debugger Avec Spyder

11
[Python]Spyder, le super éditeur de code, et aide au debug Auteur Message Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super éditeur de code, et aide au debug Lun 20 Fév 2012 - 16:19 Non, mais, ne vous cassez pas la tête sur ce point. Le python est recommandé suivant les académies, me semble-t-il. Puis, ça reste une recommandation, pas une obligation, tout comme le fait d'apprendre l'algo par l'informatique. Python est certainement utilisé parce que pas mal utilisé dans le milieu scientifique, y a un tas de bibliothèque SERIOUS BUSINESS en math, on peut expédier l'apprentissage des bases du langages en deux heures et c'est interprété pour voir le résultat en direct. Puis, c'est sous une licence très permissive, ça permet de ne pas s'embarrasser de contrat ou de licence à acheter. Mais vous n'apprendrez jamais à faire un jeu VIDÉO ou à fouiner en mémoire vive en cours de math, ça, c'est à peu près sur. On va pas devenir la soudaine patrie de milliers de Linus Torvald et John Romero. Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super éditeur de code, et aide au debug Mar 21 Fév 2012 - 18:43 Petit disclaimer : J'ai traduis cet article depuis le blog de pythonconquerstheuniverse. Il concerne l'utilisation du debugger Python. Il y aura une suite à cet article un peu plus tard, écrit par moi-même, pour expliquer comment un peu automatiser ce débuggage avec un IDE. Pourquoi utiliser un debugger alors qu'on peut utiliser l'instruction print ? Parce que, si le code commence à devenir gros, des print dans tout les sens, ça commence à devenir ingérable. Et surtout, avec un IDE, ça devient rudement pratique et intuitif. Et le debuggage permet d'aller fouiller les objets, les fonctions, d'essayer un tas de machins en temps réel, etc... J'ignore si ce tutoriel peut s'appliquer en partie à gdb, le debugger pour C. Je me souviens qu'on peut lancer Python à l'intérieur de celui-ci, mais je n'en sais pas plus. L'utilisation du debugger n'est pas réservé aux grands pros du python. Même si vous débutez en Python, vous pouvez vous en servir. Et l'utilisation du print n'est pas non plus à proscrire totalement, c'est plus pratique dans le cas de petit scripts. La traduction est "libérale". Je ne suis pas Google Translate ni professeur à la Sorbonne, j'y ai été à l'arrache. Débugger un programme en Python En tant que programmeur, une des premières choses dont vous auriez besoin pour un développement sérieux serait un debugger. Python incorpore déjà un debugger, qui est disponible comme module nommé pdb (pour Python DeBugger). Malheureusement, la plupart des discussions concernant pdb sont difficilement accessible pour les débutants — elles sont très laconique et de simples resucées de la description de pdb dans la documentation de Python. Donc, voici ma propre introduction à l'utilisation de pdb. Partons du principe que vous n'utilisez aucun IDE spécifique — vous codez avec un éditeur de texte des plus banals et vous lancez vos programmes Python depuis la ligne de commande. Mise en route — pdb.set_trace() Pour commencer, je vais vous montrer la manière la plus simple d'utiliser le debugger Python. Écrivons un petit programme, epdb1.py Code: # edpb1.py -- experimentation de pdb a = "aaa" b = "bbb" c = "ccc" final = a + b + c print(final) Insérons la déclaration suivante au début de ce programme. Cette déclaration importe le module de debuggage Python, pdb. Code: import pdb Maintenons, trouvons un endroit où nous aimerions inspecter le code, et insérons le code suivant. Code: pdb.set_trace() Désormais, le programme ressemble à cela : Code: # edpb1.py -- experimentation de pdb import pdb a = "aaa" pdb.set_trace() b = "bbb" c = "ccc" final = a + b + c print(final) [Python]Spyder, le super éditeur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d... 1 sur 11 16/05/2015 10:32

Transcript of Debugger Avec Spyder

  • [Python]Spyder, le super diteur de code, et aide au debug

    Auteur Message

    Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Lun 20 Fv 2012 - 16:19

    Non, mais, ne vous cassez pas la tte sur ce point. Le python est recommand suivant les acadmies, me semble-t-il. Puis, a reste

    une recommandation, pas une obligation, tout comme le fait d'apprendre l'algo par l'informatique.

    Python est certainement utilis parce que pas mal utilis dans le milieu scientifique, y a un tas de bibliothque SERIOUS BUSINESS

    en math, on peut expdier l'apprentissage des bases du langages en deux heures et c'est interprt pour voir le rsultat en direct.

    Puis, c'est sous une licence trs permissive, a permet de ne pas s'embarrasser de contrat ou de licence acheter.

    Mais vous n'apprendrez jamais faire un jeu VIDO ou fouiner en mmoire vive en cours de math, a, c'est peu prs sur. On va

    pas devenir la soudaine patrie de milliers de Linus Torvald et John Romero.

    Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Mar 21 Fv 2012 - 18:43

    Petit disclaimer :J'ai traduis cet article depuis le blog de pythonconquerstheuniverse. Il concerne l'utilisation du debugger Python.I l y aura une suite cet article un peu plus tard, crit par moi-mme, pour expliquer comment un peu automatiser ce dbuggage avec un IDE.

    Pourquoi utiliser un debugger alors qu'on peut utiliser l'instruction print ? Parce que, si le code commence devenir gros, des print dans tout les sens, a commence devenir ingrable. Et surtout, avec un IDE, a devient rudement pratique et intuitif.Et le debuggage permet d'aller fouiller les objets, les fonctions, d'essayer un tas de machins en temps rel, etc...J'ignore si ce tutoriel peut s'appliquer en partie gdb, le debugger pour C. Je me souviens qu'on peut lancer Python l'intrieur de celui-ci, mais je n'en sais pas plus.L'utilisation du debugger n'est pas rserv aux grands pros du python. Mme si vous dbutez en Python, vous pouvez vous en servir.

    Et l'utilisation du print n'est pas non plus proscrire totalement, c'est plus pratique dans le cas de petit scripts.

    La traduction est "librale". Je ne suis pas Google Translate ni professeur la Sorbonne, j'y ai t l'arrache.

    Dbugger un programme en PythonEn tant que programmeur, une des premires choses dont vous auriez besoin pour un dveloppement srieux serait un debugger.

    Python incorpore dj un debugger, qui est disponible comme module nomm pdb (pour Python DeBugger). Malheureusement, la

    plupart des discussions concernant pdb sont difficilement accessible pour les dbutants elles sont trs laconique et de simples

    resuces de la description de pdb dans la documentation de Python.

    Donc, voici ma propre introduction l'utilisation de pdb. Partons du principe que vous n'utilisez aucun IDE spcifique vous codez

    avec un diteur de texte des plus banals et vous lancez vos programmes Python depuis la ligne de commande.

    Mise en route pdb.set_trace()Pour commencer, je vais vous montrer la manire la plus simple d'utiliser le debugger Python.

    crivons un petit programme, epdb1.py

    Code:

    # edpb1.py -- experimentation de pdb

    a = "aaa"

    b = "bbb"

    c = "ccc"

    final = a + b + c

    print(final)

    Insrons la dclaration suivante au dbut de ce programme.

    Cette dclaration importe le module de debuggage Python, pdb.

    Code:

    import pdb

    Maintenons, trouvons un endroit o nous aimerions inspecter le code, et insrons le code suivant.

    Code:

    pdb.set_trace()

    Dsormais, le programme ressemble cela :

    Code:

    # edpb1.py -- experimentation de pdb

    import pdb

    a = "aaa"

    pdb.set_trace()

    b = "bbb"

    c = "ccc"

    final = a + b + c

    print(final)

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    1 sur 11 16/05/2015 10:32

  • Lancez le code depuis la ligne de commande:

    Code:

    PROMPT> python epdb1.py

    Quand le programme rencontrera la ligne pdb.set_trace(), il va commencer l'inspection. Pour cela, il va :

    s'arrter,1.

    afficher la "dclaration courante" (en fait, la ligne qui va tre excuter la prochaine tape),2.

    attendre une entre.3.

    Nous pouvons voir le prompt pdb, qui ressemble :

    Code:

    (Pdb)

    Excutons la prochaine dclaration... avec n" (next)Dans le (Pdb) prompt, entrez la lettre n (pour "next") en minuscule, et appuyez sur Entre. Cela va demander pdb dexcuter la

    dclaration courante. En rptant cette manipulation, vous finirez par quitter le programme, en retournant la ligne de commande.

    Flicitation ! Vous avez ralis votre premier debuggage !

    Rpter la dernire commande de debuggage... avec EntreLancez de nouveau notre code, et entrez la lettre n dans le (Pdb) Prompt (comme vu plus haut) la premire fois qu'il demande

    une instruction.

    Une fois cette instruction donne et excut, appuyons UNIQUEMENT sur Entre, sans rajouter le n minuscule. Le code va

    continuer comme si un n avait t insr.

    Voil donc le Truc #1 :

    Citation :

    Si vous pressez Entre sans entrer quoi que ce soit d'autres, pdb re-excutera la dernire commande entre manuellement.

    Dans cet exemple, la dernire commande tait n (next), donc vous pouvez la r-excuter tout au long du debuggage en appuyant

    uniquement sur Entre.

    Tout quitter... avec q (quit)Le debugger peut effectuer toute une foule de choses, dont certaines qui peuvent paratre un poil obscur. Mais la chose la plus

    importante apprendre pour le moment est de quitter le debugger !

    C'est facile. Quand vous voyez le (Pdb) prompt, pressez q (pour "quit") et la touche Entre. Pdb va se terminer et vous

    retournerez la ligne de commande. Essayez, et observez comment cela fonctionne.

    Afficher la valeur des variables... avec p (print)La chose la plus utile que vous puissiez faire avec pdb est d'afficher la valeur d'une variable. Voyons voir comment faire.

    Lorsque vous tes dans le (Pdb) prompt, entrez p (pour "print"), suivi du nom de la variable que vous souhaitez inspecter. Et,

    bien entendu, de valider la commande avec Entre.

    Notez aussi que vous pouvez afficher plusieurs variables en mme temps, en sparant leurs noms par une virgule (comme une

    instruction Python rgulire "print"). Par exemple, vous pouvez afficher la valeur des variables a, b et c de cette manire :

    Code:

    (Pdb) p a, b, c

    Quand est-ce que pdb excute une ligne ?Supposons que vous ayez progresser travers le programme jusqu' voir la ligne :

    Code:

    final = a + b + c

    et que vous demandiez la commande :

    Code:

    p final

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    2 sur 11 16/05/2015 10:32

  • Vous auriez alors l'exception NameError. Pourquoi ?

    Parce que, malgr que vous puissiez voir cette ligne, elle n'a pas encore t excut. Par consquent, la variable final n'a pas

    encore t cre.

    Maintenant, entrez n et excutez cette ligne de code. Ressayez la commande "p final". Cette fois, pdb va afficher la valeur de

    final, qui est "aaabbbccc".

    Couper le (Pdb) prompt... avec c (continue)Vous aurez probablement notez que la commande q coupe pdb d'une manire particulirement crue en fait, en tuant le

    programme.

    Si vous souhaitez simplement coupez le debuggage, mais laissez le programme s'excuter normalement, entrez la commande c

    (pour "continue") dans le (Pdb) prompt. Cela forcera le programme a continu sans tre mis en pause par le debugger.

    Cette commande peut tre lanc au dmarrage, ou si l'instruction pdb.set_trace() se trouve l'intrieur d'une boucle, elle

    continuera sans pause jusqu' la prochaine rencontre avec pdb.set_trace(), o (Pdb) prompt rapparatra.

    Voir o l'on se trouve... avec l (list)Lors d'un debuggage, il peut y avoir plein de chose inscrit l'cran, et il peut tre dur de savoir o l'on se trouve actuellement dans

    le code.

    La commande l (pour "list") est l pour cela.

    l affiche sur l'cran la zone de votre code source o vous vous situez dans l'excution courante. Par dfaut, elle liste 11 lignes de

    code. La ligne de code o vous vous situez trs exactement est au centre de cette zone, avec une petite flche "->" pointant sur

    elle.

    Pour rsumer, voici une interaction typique avec pdb :

    La dclaration pdb.set_trace() est rencontre, et vous commencez le debuggage avec le (Pdb) prompt.

    Vous pressez n et Entre, pour passer l'tape suivante du code

    Vous pressez Entre pour une tape supplmentaire.

    Vous pressez Entre pour une tape supplmentaire.

    Vous pressez Entre pour une tape supplmentaire, etc...

    D'un coup, vous ralisez que vous tes lgrement perdu. Vous n'tes plus trop sr o vous en tes dans le code.

    Vous pressez l et appuyer sur Entre. Cela liste la zone du programme o vous vous trouvez.

    Vous inspectez l'cran, retrouvez vos repres, et tes prt "repartir".

    Vous pressez n et ensuite Entre, pour passer l'tape suivante.

    Vous pressez Entre pour une tape supplmentaire.

    Vous pressez Entre pour une tape supplmentaire.

    Vous pressez Entre pour une tape supplmentaire, etc...

    Entrer dans une squence d'instructions... avec s (step into)Vous pouvez avoir debugger un gros programme programme qui utilise des squences d'instructions (fonctions, classes,

    etc...).

    Et parfois, le problme que vous essayez de trouver se trouve profondment enfoui dans une de ces squences. Considrons le

    programme suivant:

    Code:

    # epdb2.py

    import pdb

    def combine(s1, s2):

    s3 = s1 + s2 + s1

    s3 = '"' + s3 + '"'

    return s3

    a = "aaa"

    pdb.set_trace()

    Durant votre navigation via pdb, en utilisant la commande n, dans ce programme, vous vous retrouvez devant une instruction qui

    invoque une autre squence d'instructions ici, l'instruction final = combine(a, b) que pdb traite comme tout autre

    instruction. C'est dire, l'instruction est execut et vous passez l'instruction suivante ici, print(final).

    Supposez qu'il y ait un problme dans cette squence d'instructions. Dans notre cas, supposons que vous suspectiez qu'il y ait un

    bug dans la fonction combine(a, b). Ce que vous voulez, c'est pntrer l'intrieur de cette fonction et la dbugger de l'intrieur.

    Bien entendu, vous pouvez le faire. Faites cela avec la commande s (pour "step into").

    Lorsque vous excutez une instruction qui ne provoque pas d'appel de fonctions, n et s font la mme chose, passer l'tape

    suivante du code. Mais lorsque vous excutez une instruction qui invoque une fonction, s, contrairement n, va pntrer DANS

    cette fonction.

    Dans notre exemple, si vous excutez l'instruction

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    3 sur 11 16/05/2015 10:32

  • Code:

    final = combine(a, b)

    en utilisant s, la prochaine instruction que pdb va afficher sera la premire instruction de la squence d'instruction

    Code:

    def combine(s1, s2):

    et vous continuerez la procdure de debuggage l'intrieur de celle-ci.

    Continuer... mais jusqu' la fin de la squence d'instructions actuelle... avec r (return)Quand vous utilisez s pour pntrez l'intrieur d'une squence d'instructions, vous vous retrouverez coinc l'intrieur de cette

    squence. Vous avez dj examin le code qui vous intressais, mais maintenant, vous devez naviguer travers un tas de ligne

    compltement inintressante de la squence d'instruction.

    Dans cette situation, vous souhaiteriez tre capable de sauter directement la fin de la squence. En fait, vous voulez faire

    quelque chose comme la commande c ("continue"), mais vous voulez aussi continuer le debuggage la fin de la squence

    d'instruction, et retournez en mode "pas--pas" dans le reste de votre code.

    La commande pour cela est r (pour "return" ou, mieux, "continue until return"). Si vous tes dans une squence d'instructions et

    que vous tapez la commande r dans le (Pdb) prompt, pdb va excutez sans interruption (sauf si vous l'avez demandez

    explicitement dans le code avec la fonction pdb.set_trace()) le code de la squence en cours jusqu' la fin. Arriv ce stade

    stade de retour la routine appelante pdb va mettre en pause le programme et afficher de nouveau un (Pdb) prompt, o vous

    pourrez de nouveau naviguer travers le code.

    Faites n'importe quoi dans le (Pdb) prompt...Quelques fois, vous pouvez vous retrouver dans la situation suivante : vous pensez avoir dcouvert le problme. Disons que

    l'instruction o vous affectez la valeur "aaa" la variable var1 est fausse, et fait capoter votre jolie programme. Vous auriez d

    affecter la valeur "bbb" var1.

    ... enfin, disons que vous tes quasiment sr que le problme est situ l...

    Ce que vous souhaiteriez rellement faire maintenant est d'affecter "bbb" var1, et voir si le programme continue s'excuter

    sans exploser.

    Une des choses les plus sympas avec le (Pdb) prompt est que vous puissiez faire n'importe quoi l'intrieur de celui-ci vous

    pouvez effectuer n'importe quelle commande. Bon, pour le moment, entrez cette commande dans le (Pdb) prompt :

    Code:

    (Pdb) var1 = "bbb"

    Maintenant, continuez naviguer en mode "pas--pas" au sein de votre programme. Ou, si vous avec une me d'aventurier

    suicidaire, utilisez c pour couper le debugger et voir si le programme explosera quand mme avant la fin !

    ... Mais soyez quand mme un peu prudent !Maintenant que vous tes le roi du ptrole dans le (Pdb) prompt, vous pourriez avoir envi d'essayer diverses choses, comme par

    exemple affecter "BBB" la variable b.

    Code:

    (Pdb) b = "BBB"

    En faisant cela, pdb va afficher une trange erreur, expliquant qu'il ne peut pas trouver un objet nomm '="BBB"'. Mais pourquoi

    ????

    En fait, pdb va tenter d'excuter la commande "b", qui configure et liste les breakpoints (une commande dont nous n'avons pas

    trait). Il va aussi interprter le reste de la ligne comme un arguments pour la commande b, et ne pourra donc pas trouver l'objet

    dont il est question (en loccurrence ici, '="BBB"'). Donc, il va lever un message d'erreur.

    Comment donc affecter une nouvelle valeur b ? Le truc est de faire dbuter la commande par un point d'exclamation.

    Code:

    (Pdb)!b = "BBB"

    Ce point d'exclamation va permettre pdb de comprendre que la commande est une instruction Python, et non une commande

    pdb.

    The EndVoil, c'est tout pour le moment. Il y a un grand nombre de points que je n'ai pas abords ici, comme l'aide, les alias ou les

    breakpoints. Pour toutes informations les concernant, allez zieuter la rfrence pour les commandes pdb de la documentation

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    4 sur 11 16/05/2015 10:32

  • officielle Python. En complment, je vous recommande l'article de Jeremy Jones, Interactive Debugging in Python dans le OReillys

    Python DevCenter.

    En esprant que cette introduction pdb vous sera utile [pleindeblablachianttraduire]. Bonne chance !

    Steve Ferg

    Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Sam 3 Mar 2012 - 0:42

    Et voil la suite de l'article. Cette fois-ci, j'en suis l'auteur.C'est surtout un article de "promotion" pour cet excellent diteur de code qu'est Spyder. Il est trs peu connu, et pourtant, il a tout d'un grand.Concernant le code prsent ici, c'est une partie de mon code qui est utilis pour le moteur de carte d'un petit jeu que je fais. Vu que le projet sera sous licence libre,

    je m'en fous royalement si vous prenez les lignes de codes. De toute faon, on voit rien donc, a m'tonnerais que a arrive.J'ai pris ce code, parce que c'est le dernier sur lequel j'ai boss. C'est tout, ce n'est pas un super code et je suis loin d'en avoir termin avec lui.Et pour l'article, il est sous licence Licence Creative Commons Paternit - Partage l'Identique 3.0 non transpos. En gros, vous en faites ce que vous voulez (modifier,vendre, diffuser, vous torcher avec au chiotte), du moment qu'il reste sous cette licence.Et dsol pour les images zooms, j'ai mal envoy les images sur lhbergeur. Du coup, a a chi dans la colle. J'diterais tout ce foutoir demain. Finalement, j'ai eu lecourage de le faire dans la soire.

    Debugger un programme l'aide de Spyder

    Nous avons vu plus haut comment debugger un programme l'aide de pdb. Avec l'aide de l'IDE Spyder ( qui est devenu mon

    diteur de code python favori ), nous allons voir qu'il est possible de se passer de la premire tape, c'est dire l'import de pdb et

    mettre des marqueurs, via pdb.set_trace(), dans le code pour passer en mode pas--pas certains points prcis.

    De nombreux autres diteurs offrent ce type de fonction bien pratique au quotidien.

    Marquer le codeTout d'abord, nous nous dplaons vers un endroit intressant, o nous souhaiterions inspecter le code.

    Ici, nous prendrons comme exemple une boucle qui a pour fonction d'instancier ( en python, tout est objet ) un caractre unicode,

    et de le "linker" dans une nouvelle instance Tile, qui est elle-mme li dans une liste-attribut de la classe Tileset. Ce caractre

    reprsente l'image provisoire avant que je cre en rel le moteur de sprite bitmap.

    Pour rsumer mon besoin, je suis curieux de connatre le caractre unicode correspondant l'ID de la tuile.

    Donc, je vais tagger cette ligne comme un point d'arrt pour pdb. Pour cela, il me suffit :

    - soit de double-cliquer dans l'espace gauche cot de mon numro de ligne.

    - soit d'appuyer sur F12.

    Et hop, le code est tagger ce point prcis comme devant tre inspecter.

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    5 sur 11 16/05/2015 10:32

  • Maintenant, je lance le debugger. Pour cela :

    - soit je passe par le menu excution/debogger

    - soit j'appuie sur la touche correspondante ( je l'ai personnalis, j'ai donc la touche F6 ).

    Et nous passons maintenant dans la console, qui se trouve en bas droite chez moi ( chaque widget peut tre dplac sa guise).

    Inspection du code

    Bon, je revois rapidement les commandes lists ci-dessus. Un "r" pour dbuter, et hop, me voil instantanment dans la boucle

    inspecter. En passant, je vois que la partie diteur ( gauche, l o j'cris le code quoi ) place le curseur automatiquement

    l'endroit o je suis dans le code. Bien pratique dans les longs codes sources.

    Donc, je souhaite inspecter la variable locale "char" qui correspond mon caractre unicode. En temps normal, j'aurais, si j'ai bien

    suivi le tutoriel plus haut, insrer "p char; r" pour afficher le caractre unicode et sauter au prochain saut de boucle.

    Mais nous allons utiliser une petite feature de Spyder, l'affichage dynamique des variables locales.

    Dans l'encadre en haut, nous pouvons voir toutes les variables locales actuellement utiliss. Donc, la variable "char" vaut "@" et la

    variable "gid" ( correspondant mon numro de saut de boucle ici ) vaut 0. Mission accompli, je connais mon caractre unicode.

    Je continue tranquillement de passer mon code avec la commande "r" jusqu'au saut de boucle 98.

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    6 sur 11 16/05/2015 10:32

  • Dsormais, la variable "char" vaut "". Mais voil, ce signe me rappelle de mauvais souvenirs, un monstre ber-puissant dans mon

    roguelike favori. Je souhaiterais le modifier en "@" parce que a reprsent le hros dans ce jeu.

    Deux possibilits :

    - Soit je rentre la commande "char = '@'".

    - Soit je double clique sur la case "char" et j'insre mon caractre @.

    Et voil, j'ai modifi dynamiquement une variable de mon code en mmoire. Et ce, en quelques secondes !

    videmment, c'est un comportement stupide et allant l'encontre de la logique de mon code. Mais a, je m'en fous pas mal dans

    l'exemple de cet article.

    Limitation de SpyderL'affichage dynamique de spyder reprsente toutefois un petit dfaut. Il n'affiche pas les objets qu'il ne sait pas analyser ( par

    exemple, nos classes personnelles ), et on ne peut donc pas modifier dynamiquement ces objets.

    Par exemple, si j'ai un objet Orc avec des attributs HP et MP, je ne pourrais pas modifier ou lister graphiquement les attributs de cet

    objet. Il faut passer par la ligne de commande. C'est un peu dommage dans le cas d'un objet complexe, o l'on ne se souvient pas

    forcment de tout ses attributs et de toutes ses fonctions. Il faut donc fouiller dans le __dict__ de cet objet pour retrouver ce que

    l'on souhaite. videmment, ce n'est pas un norme dfaut, on a quand mme le code sous les yeux en parallle et il y a l'auto-

    compltion, et ce sera corrig dans une prochaine version.

    Pour conclure, trois petits bonus pour vous persuader d'utiliser ce magnifique IDE.

    Bonus 1: l'inspecteur de code ( ou la documentation dynamique )

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    7 sur 11 16/05/2015 10:32

  • Dans l'encadre en haut gauche, Spyder affiche la documentation de la fonction ou de la classe en cours d'utilisation. Et cela, y

    compris pour votre propre code, l'intrieur du module que vous ditez.

    Par exemple, dans l'image, j'ai un peu plus haut dans le code ma classe Board. Il m'affiche les informations de signature de la

    classe, ainsi que la docstring que j'ai renseign. En parallle, il m'affiche la signature uniquement dans une infobulle en-dessous de

    mon curseur d'dition. Bien pratique quand une fonction prend pas mal d'arguments, ou pour viter de switcher sans arrt entre le

    navigateur internet et l'diteur.

    Un bmol toutefois, les bibliothques mal document dans le code ne sont pas prises en compte. Par exemple, PySFML n'affiche

    rien, Pygame s'affiche car plus dans l'esprit python dans le code. Mais a reste quand mme relativement rare.

    Bonus 2: Profiler le code ( ou connatre le temps d'execution de chaque partie de moncode )

    C'est un outil de profiling, assez utile quand on a besoin d'optimiser son code. Il est possible de l'utiliser sans passer par Spyder,

    mais il devient bien plus intuitif avec celui-ci.

    Bon, ici, le code n'est pas trs bien choisi, parce qu'il n'y a aucune opration lourde, mais a peut sauver un code qui bouchonne

    quelque part sans que l'on sache o vraiment. Et puis, on peut partir dans une course au benchmarking !

    Bonus 3: Pylint ( ou avoir une note concernant son code )

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    8 sur 11 16/05/2015 10:32

  • Pareil que Profiler, c'est un outil stand-alone, mais bien intgr dans Spyder. Il donne une note notre code.

    Attention toutefois, c'est une note concernant principalement le respect des rgles de syntaxe python ( par exemple, la clbre

    PEP8 ) et la prsence d'erreurs ou non dans le code. Cela ne notera pas votre algorithme, ni votre architecture de code, ce serait

    trop beau ( ou trop triste, c'est selon ).

    L'utilit ? Harmoniser vos codes. En tentant d'atteindre le 10/10, vous aurez un code bien plus lisible, correctement document et

    qui respecte les conventions pour la relecture ultrieur de code. Et cela permet de partir sur de bonnes bases dans les travaux en

    quipe.

    Et si vous tentez de l'utiliser sur un de vos modules python, ne soyez pas dprim par l'affichage d'un 3/10 ( oui, a m'est arriv la

    premire fois... ) ! Cela se corrige trs facilement et vous progressez dans votre manire d'crire un code.

    Oculus Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Mar 6 Mar 2012 - 22:00

    C'est vraiment pas mal ces articles, faudrait les mettre en valeurs.

    Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Mer 7 Mar 2012 - 1:01

    Bah, je ne cherche pas vraiment ce qu'il soit en valeur. Je suis conscient que a s'adresse un auditoire relativement limit sur le

    CBNA. Faut aimer python quoi, et aller au del des outils de base. a pose dj pas mal de contrainte.

    Mais si jamais, a peut aider au moins une personne de passage, j'en serais dj content.

    Ceci dit, je ne crache pas dans la soupe, si vous voulez rigez une statue mon honneur, pas de problme.

    Sinon, j'utilise Tiled Map Editor. C'est un diteur de carte. C'est pas trop compliqu et a permet de raliser rapidement des cartes.

    Bon, c'est limit, mais peu importe.

    Ceci dit, y a un gros problme, le fichier de sortie. C'est du XML coupl des images. Ce n'est pas plus mal qu'une autre solution,

    surtout pour un diteur qui se veut universel. Mais c'est vraiment trs ****** exploiter.

    Du coup, j'ai fait un script python pour convertir ce fichier XML dans un dictionnaire Python, et incorporer les images dans ce

    dictionnaire, par des chanes de caractres (du coup, tout tient dans une seule structure). Et ce dictionnaire est enregistr dans un

    fichier.

    Le lien google-code, le script est sous licence BSD

    Y a dj des scripts pour faire la conversion Tiled=>Python, mais c'est gros et a ncessite des classes. L, tout tient dans les

    structures de base de Python, et pas besoin d'importer quoi que ce soit d'autre (hormis cPickle, pour une question de logique).

    Pour le moment, y a pas de support pour les layers Objets, mais a ne saurait tarder, parce que je vais en avoir besoin.

    L'utilisation, c'est

    python convert-tiled-to-python

    Bien videmment, c'est un script qui continue vivre, vu que j'en ai besoin. Du coup, a sera souvent modifi, jusqu' une version

    finale.

    Voil, zokao.

    Oculus Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Jeu 2 Mai 2013 - 0:14

    Bon je me suis mis au Python :

    Alors dj quelle ft le plaisir de tlcharger une machine virtuelle de seulement 20 mo. Je dois dire que j'ai t vraiment trs

    surpris par cette taille vraiment faible.

    Aprs c'est parti, on peut directe se lancer, j'ouvre Notpad++, j'cris un code basique, j'enregistre avec l'extension .py. J'ai juste

    double cliquer et le tout se lance.

    La syntaxe priori se rvle tre pas mal, lindentation pour les blocs d'instructions fait qu'au final notre code est propre.

    On a pleins de bibliothques intgres c'est vraiment cool, pas besoins de se casser la tte.

    Bon aprs pas de polymorphisme, le langage est moins riche que du C#

    Mais je pense que c'est un bon langage pour dbuter ou mme tout simplement un bon langage

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    9 sur 11 16/05/2015 10:32

  • onilink_ Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Jeu 2 Mai 2013 - 9:54

    Bah a la base c'est un langage de script, et j'ai rarement vu des langages de script aussi volus que C# & co. Leur but n'est pas la

    mais sur laccessibilit et le cot pratique de la chose :p

    J'en ai fait le semestre dernier pour la fac, on a appris a parcourir des dossier et traiter des fichiers x)

    C'est tout con mais coupl aux regex a permet quand mme de faire des trucs vachement cool

    Et ouai, python est un bon langage, puis en plus on peut l'utiliser dans Blender \o/

    _________________

    Oculus Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Jeu 2 Mai 2013 - 16:14

    C'est vrai que c'est un langage de script tellement volu que je le compare aux autres langages plus traditionnels.

    Mais compar du Ruby, il est vraiment excellent :p

    Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Dim 5 Mai 2013 - 17:22

    Bonjour. J'ai eu quelques soucis de pc ces derniers temps (j'ai d m'en racheter un en urgence...).

    Alors, concernant le polymorphisme, on peut en partie en faire. Au moins pourdriver de plusieurs classes, et pour la surcharge

    d'oprateurs.

    Code:

    class A:

    def testA():

    pass

    class B:

    def TestB():

    pass

    class C(A, B):

    pass

    Code:

    class A(object):

    def __init__(self, value):

    self.a = value

    def __add__(self, other):

    assert isinstance(other, A)

    return self.a + other.a

    def __repr__(self):

    return "" % self.a

    Y a un troisime type de polymorphisme, mais j'ai oubli ce qu'il signifiait et effectivement, je crois me souvenir que ce n'est pas

    possible en Python.

    Python pour dbuter, clairement. C'est le premier langage que l'on apprend dans mon universit, c'est qu'il y a une bonne raison.

    Et par la suite, pour une utilisation avance, a reste toujours un bon langage. Je l'utilise quotidiennement mon boulot, j'ai

    recod des systmes critiques "mtiers" et les perfs sont l.

    Aprs, pour les jeux (ce dont il est question ici), je suis partag. Les performances sont excellentes, mais tre excellent ne suffit

    pas pour les jeux. C'est un domaine qui a besoin de puissance brut (comme les OS, par exemple), et python peut malgr tout tre

    largus dans des cas critiques.

    Mais mme pour a, y a un tas de solutions :

    - Utiliss avec des bibliothques crites en plus bas niveau. C'est ce que les pythonnistes font rgulirement en ralit. Python,

    C'EST du C en interne. Du moins, l'implmentation de base. Il y a des implmentations dans d'autres langages (java, C#, etc...)

    mais a reste exotique, et quand on parle de python, on parle 99% du temps de son implmentation en C.

    - Utiliss Cython. On crit du code python, qui est traduit automatiquement en C. Il y a des trucs en plus (optionnel) utiliss en C.

    Par exemple, la dclaration statique des variables, pour l'optimisation de la compilation. Une fois le type de variable dfini, il ne

    bouge plus.

    Voici un exemple de code Cython, que j'utilisais pour travailler sur les valeurs hsv et rgb d'une image issus d'un widget Qt :

    Code:

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    """

    Created on Sat Jul 21 23:38:28 2012

    @author: Sekigo

    @licence : BSD -- http://www.freebsd.org/copyright/license.html

    For compile this code :

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    10 sur 11 16/05/2015 10:32

  • python setup.py build_ext --inplace

    Composition of buffer image:

    32bits => Blue(8)-Green(8)-Red(8)-Alpha(8)

    """

    import array

    cpdef buffer_fading_to_color(buff, rgb, int intensity):

    if intensity == 0:

    return buff

    Mais je comprendrais aisment que pour les jeux, on prfre utiliser le C, ou tout autre langages bien plus performant.

    En tout cas, avoir appris Python, c'est un choix que je ne regrette absolument pas. C'est un langage trousse--outil complet, qui

    est aussi bon en scripting qu'en programmation d'interface de logicel ou de dveloppement web. Et qui "oblige" avoir une bonne

    pratique de la programmation et d'crire lisiblement.

    Si je devais avoir une critique faire ce langage, c'est la communaut francophone quasi-inexistante sur le web. Y a bien le

    forum du sdz et le forum de dveloppeur, ou encore linuxfr.org, mais a n'a rien voir avec la communaut anglophone, o par

    exemple Python trust la premire place sur StackOverflow. Pourtant, y a pas mal de dveloppeurs franais qui connaissent le

    python. Mais la plupart se tournent vers la communaut anglophone (moi y compris).

    Et aussi un petit truc pour les futurs pythonnistes sous Windows (sous Linux, c'est dj moins utile avec le systme de paquet).

    Installer et utiliser [url="https://pypi.python.org/pypi/pip"]PIP[/url]. Avec un simple

    Code:

    pip install pysfml

    , a installera/compilera/configura automatiquement les bibliothques externes Python. Si j'ai un peu de temps cette semaine, je

    ferais un petit tuto.

    onilink_ Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Dim 5 Mai 2013 - 17:38

    A l'universit nous on a commenc direct par le C

    Python on l'a vite fait appris en L2 juste pour les regex x)

    _________________

    Sekigo Le Magnifique Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Dim 5 Mai 2013 - 17:47

    Well, c'tait une erreur de typo, j'aurais d prciser "MON universit". Autant dire que j'ai de l'avance sur le programme....

    Les regex mriteraient un topic elles seules. C'est vraiment gnial comme truc, je l'utilise aussi quotidiennement mon boulot

    (ce serait plus simple de dire les trucs utiliss au boulot : (python et regex) + (xml + xhtml + css) + XSLT (langage dcri sur le

    net, mais que j'adore) + mysql + untasd'autrestrucs).

    Par contre, n'utilisez JAMAIS de regex pour parser des structures comme du xml ou du html.... La principale raison pour laquelle

    j'ai t embauch t justement pour nettoyer ces affreuses regex pour du xml qui foutent un dawa pas possible. Pour utiliser le

    plus classique DOM.

    Mais je suis tonn que vous ayez vu les regex avec Python. Elles sont trs bien, mais le PERL ou le PHP me semblait plus adapt

    pour vous apprendre les regex.

    onilink_ Sujet: Re: [Python]Spyder, le super diteur de code, et aide au debug Dim 5 Mai 2013 - 18:21

    Je pense que c'est car on les utilisait coupl a un peu de prog systme (parcours de fichiers/dossiers, lecture, parsing, criture).

    Avec python c'est quand mme trs simple a faire.

    _________________

    [Python]Spyder, le super diteur de code, et aide au debug

    Sujets similaires

    [Python]Spyder, le super diteur de code, et aide au debug

    Souci code formulaire > erreur de navigateur

    La fentre d'dition a disparu...

    Problme iframe

    Super Fractale : L'arbre de Pythagore

    Crer un forum | phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit

    [Python]Spyder, le super diteur de code, et aide au debug - Page 2 http://cbna.forumactif.com/t10755p20-pythonspyder-le-super-editeur-d...

    11 sur 11 16/05/2015 10:32