104 votes

TypeError: worker() prend 0 arguments positionnels mais 1 a été donné

Je suis en train d'essayer de mettre en œuvre une sous-classe et cela provoque l'erreur :

TypeError: worker() prend 0 arguments positionnels mais 1 a été donné

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
    def GenerateAddressStrings(self):
        pass    
    def worker():
        pass
    def DownloadProc(self):
        pass

3voto

Simon Alford Points 955

Je reçois cette erreur chaque fois que je crée accidentellement une classe Python en utilisant def au lieu de class :

def Foo():
    def __init__(self, x):
        self.x = x
# python pense que nous appelons une fonction Foo qui prend 0 arguments   
a = Foo(x) 

TypeError: Foo() takes 0 positional arguments but 1 was given

Oups!

1voto

makkasi Points 165

Vérifiez si à partir de la méthode avec le nom method_a(), vous appelez la méthode portant le même nom method_a(with_params) provoquant une récursion

1voto

syed haris Points 31

Il suffit de passer le mot-clé self dans la fonction def worker():

class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
    def GenerateAddressStrings(self):
        pass    
    def worker(self):
        pass
    def DownloadProc(self):
        pass

0voto

scooter Points 1

Un autre cas d'utilisation de cette erreur est lorsque vous importez des fonctions dans la définition de la classe. Cela fait que les appels de fonction ultérieurs font partie de l'objet de la classe. Dans ce cas, vous pouvez utiliser @staticmethod sur la fonction d'importation de la bibliothèque ou faire un appel de chemin statique directement à la fonction. Voir l'exemple ci-dessous

Dans cet exemple, "self.bar()" lancera une TypeError, mais cela peut être corrigé de deux manières

# in lib.py
def bar():
  print('quelque chose à faire')

# in foo.py
class foo():
  from .lib import bar

  def __init__(self):
    self.bar()

Option 1:

# in lib.py
def bar():
  print('quelque chose à faire')

# in foo.py
class foo():
  from .lib import bar

  def __init__(self):
    lib.bar()

Option 2:

# in lib.py:
@staticmethod
def bar():
  print('quelque chose à faire')

# in foo.py
class foo():
  from .lib import bar

  def __init__(self):
    self.bar()

0voto

Lorsque je faisais Flask Basic auth, j'ai obtenu cette erreur et j'ai réalisé que j'avais wrapped_view(**kwargs) et que cela a fonctionné après l'avoir changé en wrapped_view(*args, **kwargs).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X