如果我只传递一个参数,为什么会出现 TypeError?

Why do I get a TypeError if I pass only one argument?

def divide(num1,num2):
    try:
        return num1/num2
    except TypeError:
        return "Please provide two integers or floats"
    except ZeroDivisionError:
        return "Please do not divide by zero"

对于位置参数,您必须传递相同数量的参数。您可以使用默认参数概念,例如:

def divide(num1=1,num2=1):
    try:
        return num1/num2
    except TypeError:
        return "Please provide two integers or floats"
    except ZeroDivisionError:
        return "Please do not divide by zero"

您可以使用 0,1 或 2 个参数调用此函数。

因为您的 try/except 语句正在捕获该异常并返回指定的消息。

尝试这样的事情:

try:
   if num1 and num2:
      return num1 / num2
   else:
      return "Please provide two numbers"
except ZeroDivisionError:
   return "Please do not divide by zero"
except TypeError:
   return "Please provide two integers or floats"

如果您没有提供所有必需的参数,则永远不会进入该函数,因此无法从 函数内部捕获 TypeError

为了说明,考虑一个立即出错的函数:

>>> def func(a, b, c):
...     raise Exception("inside the function")
...

现在让我们用所需的参数调用它:

>>> func(1, 2, 3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in func
Exception: inside the function

在这里你可以从回溯(in func)中看到函数被输入并从那里抛出错误。但是,如果我们在没有参数的情况下再次调用它:

>>> func()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() takes exactly 3 arguments (0 given)

请注意,回溯不包括 in func,错误发生在进入函数体之前。您只能在 函数之外捕获它:

>>> try:
...     func()
... except TypeError:
...     print('oh no!')
...
oh no!