Le blog de Fatiha

Une geek de plus !

Erreur python : IndexError: list index out of range

 

Comme vous le savez tous, je débute en python. Je ne programme pas vraiment mais il m’arrive de devoir déboguer des programmes écrits en python. Ce matin, une erreur m’énerve particulièrement :

IndexError: list index out of range

Voilà ce que ça donne avec la trace complète de l’erreur :

Traceback (most recent call last):
File « monScript.py », line 357, in ?
main()
File « monScript.py », line 349, in main
maFonction(monParam)
File « monScript.py », line 246, maFonction
maVariable = str(dataLigne[monChamp])
IndexError: list index out of range

Je comprends que le script souhaite accéder à un index qui n’existe pas. Mais pour en avoir le cœur net, je lance une petite recherche sur Google et je tombe sur les sites suivants :

(j’ai remplacé les noms de fichier, de variables et de fonction pour conserver un minimum de confidentialité)

POO en python, un exemple avec les fonctions search et compile

 

J’ai essayé de prendre en compte les remarques et conseils que j’ai eus via ce blog et via twitter. Un grand merci à : @Abd_fr, @Niyyou et @kiki67100.  Pour coder cette classe, j’ai utilisé l’IDE PyCharm, IDE que m’a conseillé @Abd_fr. Je peux dire qu’il y a un avant et après PyCharm.

J’ai essayé de partir de mon précédent article et de perfectionner un peu les choses. Comme je le dis souvent, ce n’est encore qu’un début. Passons à la pratique.

La classe ci-dessous contient deux méthodes :

  • une méthode qui affiche les arguments passés lors de l’instanciation de l’objet personne => print_args
  • une méthode qui recherche une ville précise dans l’adresse donnée lors de l’instanciation de l’objet personne
Vous remarquerez que j’ai importé le module re. C’est indispensable pour pouvoir utiliser les méthodes compile et search. J’ai déjà parlé de la méthode search dans un précédent article. 
import re
__author__ = 'FATIHA'
class MyIdentityClass (object):
    def __init__(self,_firstname,_lastname,_address):
        self._firstname=_firstname
        self._lastname=_lastname
        self._address=_address

    def print_args(self):
        print self._firstname
        print self._lastname
        print self._address

    def search_city (self,_city):
        pattern = re.compile(_city)
        if pattern.search(self._address):
            print "Yes"
        else:
            print "No"

personne=MyIdentityClass("michel","dupont","70 avenue Mozart, 75016 Paris")
personne.print_args()
personne.search_city("Paris")
personne.search_city("Londres")

Le résultat est le suivant :

michel
dupont
70 avenue Mozart, 75016 Paris
Yes
No

Programmation orientée objet en python : ma première classe

 

Cet article fait suite à la série d’articles que je rédige sur le langage python.

Je ne vais pas revenir ce qu’est la programmation orientée objet, vous pouvez trouver énormément de définitions et de cours sur le sujet sur le net. Arrêtons-nous sur ce qu’est une classe et allons droit au but, comment créer uune classe en python et comment lui associer des objets et des méthodes. « Une classe crée un nouveau type où les objets sont des instances de la classe ». Cette définition est issue du site swaroopch.com. Elle est claire et précise. Nous savons maintenant ce qu’est une classe et ce qu’est un objet. Le troisième terme à comprendre est le terme méthode : « Les objets peuvent aussi avoir des fonctionnalités en utilisant des fonctions qui appartiennent à une classe. » Cette définition de la méthode est encore issue du site swaroopch.com.

Passons tout de suite à un cas pratique issu du site voidspace.org.uk :

class maPremiereClasse(object):
    """Class docstring."""

    def __init__(self, arg1, arg2):
        """Method docstring."""
        self.arg1 = arg1
        self.arg2 = arg2

    def printargs(self):
        """Method docstring."""
        print self.arg1
        print self.arg2

# l'instanciation de l'objet appelle la methode init
instance=maPremiereClasse("mon argument 1","mon argument 2")

print type(instance)

#appelle la methode printargs
instance.printargs()

Ce qui donne :

Au niveau de cette exemple, deux méthodes sont définies : la méthode __init__ et la méthode printargs. La méthode __init__ est optionnelle, elle peut ne pas figurer dans une classe définie par un utilisateur. Mais quand elle est définie, elle doit avoir comme premier argument self. Qu’est-ce que self ? Quand est-ce qu’il est utilisé et comment l’utiliser ?

Ce qu’on doit savoir c’est que le paramètre self est toujours passé en paramètre des méthodes de l’objet. Même si on ne sait pas encore à quoi il sert, il faut l’utiliser. Nous voyons d’ailleurs dans l’exemple ci-dessus qu’il est passé en paramètre de printargs et de la méthode __init__. Sur swaroopch.com, self est expliqué ainsi : « cette variable particulière fait référence à l’objet lui-même, et par convention on lui donne le nom de self. « 

Pour vérifier que j’ai bien compris les bases de la programmation orientée objet en python, je vais jouer au quizz du site du zéro. Cool, j’ai obtenu 20/20. C’est un bon début, cela signifie que je suis sur la bonne voie :)

Sources :

 

Manipuler les chaînes de caractères en python : fonction strip

 

Cet article fait suite à la série d’articles que je rédige sur le langage python.

Nous allons nous intéresser à la fonction strip, cette fonction supprime les espaces en début et en fin de chaîne. Si vous lui passez un paramètre, elle supprimera un caractère en particulier en début et en fin de chaîne. Passons tout de suite à la pratique :

texte1 = "      ceci est un exemple     "
texte2 = "******ceci est un exemple*****"
texte3 = "0000003456676767000000"

print texte1.strip()
print texte2.strip("*")
print texte3.strip("0")

Source :

- Fonction strip sur tutorialspoint.com

Python « IndentationError: unindent does not match any outer indentation level »

 

J’ai exécuté un script python qui m’a généré l’erreur ci-dessous :

   if maVariable is None :
                         ^
        IndentationError: unindent does not match any outer indentation level

=> Il y a un problème d’indentation, en relisant mon code, j’ai remarqué que j’avais mal positionné le bloc. En le positionnant correctement, l’erreur a disparu.

if maVariable is None :

 

Utilisation simple de la fonction search en python

 

Pour pouvoir utiliser cette fonction, il faut tout d’abord importer le module re :

import re

C’est indispensable pour pouvoir se servir des expressions régulières ou regexp.

Nous allons voir tout de suite un exemple. Prenons une chaîne de caractères : « je programme en python aujourd’hui » et recherchons le terme python.

import re

maPhrase="je programme en python aujourd'hui"

if re.search('python',maPhrase) :
      print "OK"

Cela affiche OK car le terme python est contenu dans la variable maPhrase.

Deuxième exemple similaire :

import re

maPhrase="je programme en php aujourd'hui"

if re.search('python',maPhrase) :
      print "OK"
else :
      print "KO"

Cela affiche KO car le terme python n’est pas contenu dans la variable maPhrase.

Je débute en python, je verrai les cas compliqués un peu plus tard.

Source :

Explications sur le module re

Histoire des langages de programmation en infographie

 

Sur le site de Vincent Abry, j’ai trouvé une infographie fort intéressante sur l’histoire des langages de programmation, de Fortran au Java, en passant par le pascal, le php, le python ou encore perl.

Pour la petite histoire, voici les premiers langages de programmation que j’ai appris à l’école :

  • Pascal
  • Assembleur
  • C++
  • PHP

Ensuite une fois dans le monde professionnel, je me suis mise au perl, à l’html, au javascript, au shell, … Ces derniers temps j’apprends tranquillement le langage python.

Pour revenir à l’infographie, il ne faut pas prendre en compte la classement des langages de programmation les plus utilisés. Ce classement évolue en effet très vite et d’après @cafedelinfo qui a relayé l’information publiée sur le monde de l’informatique, ci-dessous le nouveau classement :

Ma série d’articles sur le langage de programmation python

 

Je vous ai listé ma série d’articles sur le langage de programmation python. 

Ce n’est encore qu’un début, il me reste beaucoup à faire pour réellement dire que je maîtrise le python. Il faut que je progresse en gestion de fichiers, en communication avec des bases de données, en programmation de GUI (graphical user interface), et j’en passe. Je reste motivée et suis persuadée que je vais progresser vite. Tiens, ça me fait penser qu’il faut que j’ajoute ça dans mon schemer : « progresser en langage de programmation python ».

Pour les programmeurs, savez-vous programmer en python ?

View Results

Loading ... Loading ...

Manipuler les chaînes de caractères en python : fonction split

 

Cet article fait partie d’une série consacrée au langage de programmation python. Nous allons apprendre comment manipuler des chaînes de caractères. Je vais commencer par la fonction split.

Découpage de chaînes de caractères avec la fonction split

La syntaxe de la fonction split est la suivante :

str.split(str= »", num=string.count(str)).

str : chaîne de caractères

Le 1er paramètre de la fonction correspond au séparateur, s’il est vide le séparateur par défaut sera l’espace.

Le 2e paramètre, également optionnel correspond au nombre d’éléments à obtenir.

Au niveau de l’exemple ci-dessous nous découpons une chaîne de caractères en 5 éléments. Nous pouvons de ce fait parcourir la liste obtenue, élément par élément.

jours= "lundi mardi mercredi jeudi vendredi"
jours.split
for jour in jours.split():
	print jour

Nous allons utiliser la fonction split en indiquant un séparateur différent, par exemple le ; => séparateur utilisé dans les fichiers csv. L’exemple ci-dessous consistera à découper une chaîne de caractères puis à lancer un traitement sur cette liste.

jours= "lundi;mardi;mercredi;jeudi;vendredi"
jours.split
for jour in jours.split(";"):
	print jour

Le résultat est le même :

 

Sources :

Utilisation de fonctions prédéfinies en python

 

Nous allons apprendre aujourd’hui comment utiliser les fonctions prédéfinies en python. C’est le 4e article de la série consacrée à l’apprentissage du langage python (lire le 1er article, le 2e article et le 3e article). Nous allons prendre deux exemples : les fonctions mathématiques et les fonctions de date.

Le 1er exemple consiste à demander à l’utilisateur de saisir un nombre au clavier puis le programme lui calcule la racine carrée de ce nombre. Nous utilisons ici le module math.

from math import *

print "Tapez un nombre :",
nombre = int(raw_input())
print 'La racine carree de ', nombre, 'est : ', sqrt(nombre)

En indiquant from math import * nous lui demandons d’importer toutes les fonctions du module math. Nous pouvions aussi lui demander uniquement la fonction sqrt en tapant : from math import sqrt

Lançons le programme et voyons ce que ça donne :

 

Maintenant que nous avons compris le principe, passons maintenant aux fonctions de date en important le module datetime.

from datetime import *

# je cree ma variable contenant la date du jour
dateDuJour=datetime.now()

print 'Date du jour avec la fonction today :', date.today()
print 'Date du jour avec la fonction now :', datetime.now()
print 'Formatage de la date du jour avec la fonction strftime qui prend en parametre le format de la date :', dateDuJour.strftime("%d %B %Y %I:%M%p")

Dans un prochain article, nous verrons comment créer nos propres fonctions.

Sources :