如何解决 "需要0个位置参数但给了1个 "的错误

535 阅读3分钟

在这篇文章中,我们将学习如何解决 "需要0个位置参数,但给了1个 "的错误。让我们开始吧!

为什么会出现 "需要0个位置参数但给了1个 "的错误?

让我们定义下面的示例函数 "add_numbers",它接受两个参数num_1和num_2。

代码示例 1:

def add_numbers(num_1, num_2):
    sum = num_1 + num_2
    print('The sum of two numbers is: ', sum)

现在当我们需要将两个数字相加时,我们只需要将这些数字作为参数传递给函数。请看下面。

输出

>>> add_numbers(33, 23) # calling the function first time
>>> The sum of two numbers is: 56
>>> add_numbers(45, 45) # calling the function second time
>>> The sum of two numbers is: 90

因此,从输出结果来看,我们可以看到,多次调用该函数要比执行原始加法容易得多。让我们执行另一项任务,即两个数字相乘。

代码示例2

def multiply(num_1, num_2):
    product= num_1 * num_2
    print('The product of two numbers is: ', product)

输出

>>> multiply(4, 100) # calling the function first time
>>> The product of two numbers is: 400
>>> multiply(40, 60) # calling the function second time
>>> The product of two numbers is: 2400

函数的类型

有两种类型的函数:

  1. 参数化:要放在括号内的值。一般用于高端应用。
  2. 非参数化:空括号。一般用于基本流程。

Python中的函数类型

当程序员在处理一个特定函数的参数时,他们需要记住一些事情:

  1. 该函数拥有的参数数量。
  2. 每个参数应该做什么。

当程序员没有考虑这两点时,Python解释器就会产生错误,其中之一就是:

Traceback (most recent call last):
  File "c:\Users\Lenovo\Desktop\sample.py", line 8, in <module> 
    function(parameter)
TypeError: function() takes 0 positional arguments but 1 was given

这是Python中最常见的TypeError。当指定的匹配数据类型在那段特定的代码中没有找到时,它就会发生。

例子:取0个位置参数,但给了1个。

比方说,我们定义了一个函数来除以两个数字。这是一个非参数化的函数,调用后需要输入。

例子 1:

def divide():
    num_1 = int(input('enter num_1: ' )) # taking input for num_1
    num_2 = int(input('enter num_2: ' )) # taking input for num_2
    
    div = num1/num2
    print('The division is: ', div)

divide(3)

输出:

Traceback (most recent call last):
  File "c:\Users\Lenovo\Desktop\sample.py", line 8, in <module>
    divide(3)
TypeError: divide() takes 0 positional arguments but 1 was given

在上面的例子中,divide()函数需要两个参数。这两个参数都是强制性的,而且都不是位置性的。这就是为什么,该函数抛出一个错误 "需要0个位置参数,但给出了1个"

当我们用一个参数调用divide()时,解释器会抛出这个错误。

例2:

def add_numbers():
    num_1 = int(input('Enter number 1: '))
    num_2 = int(input('Enter number 2: '))  
    sum = num_1 + num_2
    print('The sum of two numbers is: ', sum)

add_numbers(45, 2) #  calling the function in python shell

输出

Traceback (most recent call last):
  File "c:\Users\Lenovo\Desktop\sample.py", line 7, in <module>       
    add_numbers(45, 2)
TypeError: add_numbers() takes 0 positional arguments but 2 were given

我们知道解释器是逐行读取代码的,它扫描每一行的代码并抛出错误。我们得到了同样的错误,因为我们给了两个位置参数,尽管这个函数不接受任何东西。

如何修复 "接受'0'个位置参数,但给了'1'个 "的错误?

该错误将显示发生错误的函数名称。要解决这个错误:

  • 检查该函数接受什么类型的参数
  • 找到该函数的所有调用,确定是否有任何函数调用是错误的
  • 通过简单地改变有问题的函数调用来解决这个错误。

结论

关于"接受0个位置参数但给了1个参数 "的话题到此为止。这个概念是直截了当的。我希望你能够解决你代码中的错误。如果你有任何问题,请给我们留言,我们将帮助你解决。