dimanche 17 mai 2015

Portée des variables - debogage facile avec execfile()

Bonjour,
Juste un petit article pour aborder/rappeler deux points intéressant en Python

La portée des variables
Aussi appelé "variable scope" en anglais. Sujet assez bien connu en général mais l'on fini toujours par tomber dans une cas particulier.

J'ai récemment voulu assigner la valeur d'une variable globale (objet d'accès à API PrestaShop) depuis une fonction d'initialisation...
Il m'aura fallut faire un peu de lecture pour comprendre que je devais la redéfinir comme "global" dans ma fonction pour pouvoir en assigner la valeur et que cette valeur persiste hors de la fonction.

api_point = None 

def init():
  global api_point # indiquer que api_point est global
                   # et donc hors de la portée de cette fonction

  # lecture des parametres
  ...

  # Création de l'objet qui restera accessible sur le 
  # une portée globale.
  api_point = PrestaAPI( ...parametres... )

def print_info()
  api_point.dump_connexion_info()


Une petite lecture fort intéressante se trouve ici

execfile() pour faciliter le débogage en Python
A la base, execfile() est une fonction Python qui permet de charger un fichier Python et de l'exécuter.
Pratique pour exécuter un autre module à la volée depuis votre programme, j'ai surtout trouvé cette fonction très utile pour faire du débogage depuis Python en mode interactif.

En effet, certain soft sont suffisamment complexe et déboguer la couche d'accès est parfois complexe. Plutôt que de mettre beaucoup de point d'arrêt ici et là, il est possible de
  1. Créer un script python minimal (juste ce qu'il faut pour accéder aux éléments principaux, par exemple basic.py)
  2. De démarrer python en mode interactif (démarrer simplement le python)
  3. Puis de faire un execfile('basic.py') pour charger et exécuter votre script de base.
Cette méthode relativement simple permet d'avoir accès a toutes vos structures en mode interactif, vérifier les données, les objets, etc.
Les instructions dir() et type() seront également vos meilleurs amis.

Simple et redoutable d'efficacité.

Aucun commentaire: