Main

Retour vers le tutoriel complet

Nous utilisons python comme un langage de script... De fait, nous avons la main sur l'espace des variables en fin d'exécution et le debugage est plutôt aisé... La question générale est: comment reprendre la main au milieu d'une méthode?

Debug avec un point d'arret

Le but de cette section est de rendre la main, temporairement, à l'utilisateur au milieu d'une méthode.

import pdb

def maMethode(v):
    for i in range(10):
        if(i==3):
            pdb.set_trace()
        print("Hello ",v[i])

maMethode(np.arange(12))

Permet d'obtenir le comportement suivant:

  Hello  0
  Hello  1
  Hello  2
  > <ipython-input-8-d0ad2c83c5f3>(7)maMethode()
  -> print("Hello ",v[i])
  (Pdb) 
  >?

On alors la main, et on peut demander la valeur de i ou n'importe quelle variable locale.

Equivalent python de dbstop if error

Malheureusement, c'est plus dur en python...

import pdb, traceback, sys
import numpy as np


def maMethode(v):
    for i in range(10):
        print("Hello ",v[i])
    print("Finished ") # passage impossible vue la taille de v...

def bombs():
    maMethode(np.arange(8))


if __name__ == '__main__':
    try:
        bombs()
    except:
        type, value, tb = sys.exc_info()
        traceback.print_exc()
        pdb.post_mortem(tb)

le programme plante et rend la main, mais il rend la main DANS la fonction qui a planté

  Hello  0
  Hello  1
  Hello  2
  Hello  3
  Hello  4
  Hello  5
  Hello  6
  Hello  7
  > <ipython-input-2-02f871063e4c>(7)maMethode()
  -> print("Hello ",v[i])
  (Pdb) >? i
  8
  (Pdb) 
  >?

Nous avons accès à i