FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 269, dernière mise à jour : 10 septembre 2014  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois il se peut que les réponses apportées contiennent des erreurs, imprécisions ... Vous pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques.

L'équipe Python de Developpez.


SommaireLes erreurs (5)
précédent sommaire suivant
 

L'erreur de type IndexError intervient lorsqu'on tente d'accéder à un élément d'une séquence n'existant pas. Les séquences sont indexées de 0 (premier élément) à longueur(séquence) - 1 (dernier élément).

Code python :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> l = [10, 3, 15] 
>>> s = "abcde" 
>>> print l[0], l[2] 
10, 15 
>>> print l[6] 
  
Traceback (most recent call last): 
  File "<pyshell#2>", line 1, in <module> 
    print l[6] 
IndexError: list index out of range 
>>> print s[3] 
'd' 
>>> print s[len(s)] 
  
Traceback (most recent call last): 
  File "<pyshell#4>", line 1, in <module> 
    print s[len(s)] 
IndexError: string index out of range

Mis à jour le 21 août 2007 Guigui_

Ce message est obtenu lorsque vous essayer d'accéder à un attribut de type None. Souvent, il s'agit d'un objet que vous aviez précédemment construit correctement mais auquel vous avez réaffecté une valeur None en lui appliquant une fonction de retour None.

Vous pouvez également obtenir des erreurs de même type AttributeError: 'str' object has no attribute ... ou encore AttributeError: 'int' object has no attribute ... qui résulteront de fonctions de retour une chaîne de caractères ou un entier.

Par exemple, les chaînes de caractères et les entiers sont des objets immuables, il est donc courant d'utiliser la syntaxe monstring = monstring.mafonction() pour pouvoir réaffecter la valeur de retour de mafonction à monstring. Mais pour les objets muables, ceux-ci possèdent parfois des fonctions qui les modifient directement sans avoir besoin de les réaffecter (par exemple, pour une liste, la fonction malist.sort() va trier la liste malist en place et retourner une valeur de None)

Code python :
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> l = [5, 1, 4] 
>>> l = l.sort()  ## ici, on a en fait affecté None à l 
>>> l.append(5) 
  
Traceback (most recent call last): 
  File "<pyshell#12>", line 1, in <module> 
    l.append(5) 
AttributeError: 'NoneType' object has no attribute 'append' 
  
>>> l = [5, 1, 4] 
>>> l.sort()  ## ici, on trie en place l 
>>> l 
[1, 4, 5]

Mis à jour le 24 août 2007 Guigui_

[Tkinter] Pourquoi j'obtiens le message AttributeError: 'NoneType' object has no attribute ... ?

Ce message peut intervenir pour deux raisons principales. La première est que vous essayer d'accéder à un attribut du module qui n'existe pas. Python étant sensible à la casse, vérifiez alors que vous ne vous êtes pas trompé dans l'utilisation des majuscules et minuscules. Avec un simple print dir(monmodule), vous aurez aussi accès à tous les attributs du module monmodule et vous pourrez alors effectivement vérifier que l'attribut en question n'est pas présent (ou sous une autre orthographe).

La deuxième possibilité est que le module où l'erreur a eu lieu n'est pas celui que vous pensiez avoir importé. Il suffit que dans l'ensemble des répertoires dans lequel Python va rechercher les modules à importer, il en existe 2 ayant le même nom, et vous n'êtes plus sûr de celui qui subsistera. Typiquement, si le nom de votre programme est le même que celui d'un module de la bibliothèque standard, ce dernier ne sera pas importé. Choississez donc un nom pour vos fichiers qui soit différent des autres modules existants.

Mis à jour le 23 août 2007 Guigui_

Lorsque vous faite une importation d'un module, si celui-ci n'est pas installé sur votre ordinateur ou bien que Python n'est pas capable de le trouver à partir des variables d'environnement, vous obtiendrez le message d'erreur ImportError: No module named ... . S'il s'agit d'une bibliothèque externe, il vous faudra donc en général télécharger et installer la bibliothèque en question. Vous trouverez bon nombres de liens sur notre page Outils Python .
S'il s'agit d'un de vos propres modules, cela signifie donc que Python ne cherche pas au bon endroit. Cela peut arriver lorsque vous faites des importations directement depuis le shell Python (ou celui d'IDLE par exemple) où le répertoire local n'est souvent pas celui auquel on pense.
Faites attention aussi à la casse, Python est sensible au majuscule/minuscule.
Pour un module standard, vérifier qu'il est bien présent selon la version de Python que vous utilisez.
Il peut enfin s'agir d'un module qui n'est pas disponible sous tous les systèmes d'exploitation. Référerez à la Python Library Reference pour vérifier la disponibilité du module en question.

Mis à jour le 21 février 2007 Guigui_

Comment importer un module qui n'est pas dans le répertoire courant ?

Ce message d'erreur intervient lorsque vous essayer d'effectuer entre 2 objets une opération qui n'est pas supportée. Cela intervient souvent lorsque les objets sont de types différents. Python est un langage fortement typé, c'est à dire qu'il ne modifiera jamais le type d'un objet sauf si une conversion est demandée explicitement.

Ainsi, si vous voulez concaténer un nombre et une chaîne de caractères, il vous faudra tout d'abord convertir le nombre en chaîne.

Code python :
1
2
3
4
5
6
7
8
>>> 5 + 'e' 
  
Traceback (most recent call last): 
  File "<pyshell#0>", line 1, in <module> 
    5 + 'e' 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 
>>> str(5) + 'e' 
'5e'

Mis à jour le 25 février 2008 Guigui_

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
 
 
 
Partenaires

PlanetHoster
Ikoula