takes 0 positional arguments but 1 was given

Python Erreur courante

Explication

L'erreur `TypeError: method() takes 0 positional arguments but 1 was given` survient quand une fonction ou méthode reçoit **plus d'arguments qu'elle n'en accepte**. Pour une méthode, le cas classique est l'**oubli de `self`** dans la définition : Python passe automatiquement l'instance, qui devient alors un argument inattendu. ```python class Compteur: def increment(): # self oublié dans la définition ... Compteur().increment() # l'instance est passée → 1 argument de trop # TypeError: increment() takes 0 positional arguments but 1 was given ```

Causes courantes

- **`self` oublié** dans la définition d'une méthode d'instance. - **Appel d'une fonction** avec plus d'arguments que sa signature. - **Décorateur** qui modifie la signature attendue.

1. Ajoutez self à la méthode

class Compteur:
    def increment(self):   # ✅ self en premier paramètre
        ...

2. Alignez l'appel sur la signature

def saluer():
    print("Bonjour")

saluer()        # ✅ aucun argument
# saluer("x")   # ❌ un argument de trop

3. Méthode sans instance : @staticmethod

Si la méthode n'a vraiment pas besoin de l'instance :

class Maths:
    @staticmethod
    def increment(x):     # pas de self, mais accepte un argument
        return x + 1

Comment prevenir cette erreur

- **Mettez toujours `self`** comme premier paramètre des méthodes d'instance. - **Vérifiez la signature** d'une fonction avant de l'appeler. - Un linter (`pylint`) signale les méthodes sans `self`. - Référence : [docs.python.org — Classes](https://docs.python.org/fr/3/tutorial/classes.html).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Quelle différence avec « missing 1 required positional argument: 'self' » ?
C'est le symétrique : « takes 0... but 1 given » = vous avez oublié `self` dans la **définition** (la méthode n'attend rien mais reçoit l'instance) ; « missing... 'self' » = vous appelez la méthode **sur la classe** sans instance. Les deux tournent autour de `self`.
Quand utiliser `@staticmethod` ?
Quand la méthode n'utilise ni `self` ni `cls`. Elle peut alors accepter ses propres arguments sans recevoir l'instance, et s'appelle directement sur la classe.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.