类型错误:采用 0 个位置参数,但给出了 1 个

目录

TypeError: takes 0 positional arguments but 1 was given

  1. 类型错误:采用 0 个位置参数,但给出了 1 个
  2. 类型错误:采用 0 个位置参数,但给出了 2 个

TypeError: 采用 0 个位置参数但给出了 1 个

Python“TypeError: takes 0 positional arguments but 1 was given”的出现有多种原因:

  1. self忘记在类方法中指定参数。
  2. 忘记在函数中指定参数。
  3. 将参数传递给不接受任何参数的函数。
  4. 错误地覆盖了内置函数。

typeerror 采用 0 个位置参数,但给出了 1 个

self忘记在类方法中指定参数

下面是错误如何发生的示例。

主程序
class Employee(): # 👇️ forgot to take self arg def get_name(): return 'Bobby Hadz' emp = Employee() # ⛔️ TypeError: Employee.get_name() takes 0 positional arguments but 1 was given print(emp.get_name())

self我们忘记在类方法的定义中指定参数get_name

selfPython在调用类方法时会自动传递给类方法,因此不带参数的方法会被传递给导致错误的方法。
主程序
class Employee(): # 👇️ specify self arg def get_name(self): return 'Bobby Hadz' # ✅ create instance of the class emp = Employee() print(emp.get_name()) # 👉️ "Bobby Hadz"

self表示类的实例 – 调用方法的实例。

在方法的定义中指定self参数可以解决错误。

如果您的方法将self其作为第一个参数,请确保在类的实例而不是类本身上调用该方法。

如果您的方法不使用参数,请使用静态self方法

如果您的方法不使用参数self,您可以声明一个
静态方法

主程序
class Employee(): @staticmethod def get_name(): return 'Bobby Hadz' emp = Employee() print(emp.get_name()) # 👉️ "Bobby Hadz"

静态方法不接收隐式第一个参数,可以在类或类的实例上调用。

忘记在函数定义中指定参数

当您忘记在函数定义中指定参数或将参数传递给不接受任何参数的函数时,也会导致该错误。

主程序
def get_list(): return ['a', 'b', 'c'] # ⛔️ TypeError: get_list() takes 0 positional arguments but 1 was given result = get_list('a')

get_list函数不接受任何参数,但在调用时会传递 1。

在这种情况下,我们要么必须更新函数的声明并获取参数,要么从函数调用中删除参数。

下面是从函数调用中删除参数的示例。

主程序
def get_list(): return ['a', 'b', 'c'] result = get_list() print(result) # 👉️ ['a', 'b', 'c']

这是在函数定义中指定参数的示例。

主程序
def get_list(x): return ['a', 'b', 'c', x] result = get_list('d') print(result) # 👉️ ['a', 'b', 'c', 'd']

覆盖内置方法和类

错误的另一个常见原因是通过声明具有相同名称的函数来覆盖内置函数和类。

主程序
def str(): return 'bobbyhadz.com' # ⛔️ TypeError: str() takes 0 positional arguments but 1 was given result = str(123)

我们声明了一个str隐藏内置str类的函数。

当我们调用str()时,我们实际上是在调用我们自己的函数,而不是内置类。

确保您没有与内置函数共享相同名称的函数。

TypeError: 采用 0 个位置参数,但给出了 2 个

Python“TypeError: takes 0 positional arguments but 2 were given”的出现有多种原因:

  1. 忘记指定函数的参数。
  2. 将 2 个参数传递给不带任何参数的函数。
  3. 错误地覆盖了内置函数。
  4. self忘记在类方法中指定arg。

typeerror 采用 0 个位置参数,但给出了 2 个

忘记指定函数的参数

下面是错误如何发生的示例。

主程序
def do_math(): return a + b # ⛔️ TypeError: do_math() takes 0 positional arguments but 2 were given result = do_math(10, 15)

我们忘记指定do_math函数接受的参数并调用函数传递给它的2参数导致错误。

要解决该错误,请确保在其定义中指定函数采用的参数。

主程序
def do_math(a, b): return a + b result = do_math(10, 15) print(result) # 👉️ 25

现在该函数接受2参数 –ab传递 2 个参数,因此错误得到解决。

如果您的函数不需要接受任何参数但被调用 with 2,则必须从函数调用中删除参数。

主程序
def do_math(): return 10 + 10 result = do_math() print(result) # 👉️ 20

现在该函数不接受任何参数,也不会传递任何参数。

指定self为类中的第一个参数

如果在使用类时出现错误,请确保将其指定self为类方法中的第一个参数。

主程序
class Employee(): # 👇️ specify self as first arg def get_name(self, name): return name emp = Employee() print(emp.get_name('Bobby Hadz')) # 👉️ "Bobby Hadz"
selfPython在调用时自动传递给类方法。

self代表类的一个实例,所以当我们将一个变量赋值为

如果不在self方法中使用关键字,则使用静态方法

如果您的方法不使用参数self,您可以声明一个
静态方法

主程序
class Employee(): @staticmethod def get_name(name): return name emp = Employee() print(emp.get_name('Bobby Hadz')) # 👉️ "Bobby Hadz"

静态方法不接收隐式第一个参数,可以在类或类的实例上调用。

确保您没有通过声明同名的函数来覆盖任何内置函数或类,这也可能导致错误。