gpt4 book ai didi

python - 如果我只给这个函数一个参数,为什么异常处理不起作用?

转载 作者:行者123 更新时间:2023-12-01 03:01:42 25 4
gpt4 key购买 nike

这是一个函数:

def add(a, b):
try:
return a + b
except TypeError:
print('Error: It takes exactly 2 arguments')

运行完美:

print(add(5,2))

这不会打印我期望的消息:

print(add(5))

为什么?

最佳答案

您的消息不会被打印,因为该函数从未被调用。

这是一个更简单的示例,它不会 try catch 任何异常,以显示发生了什么:

# add_test.py

def add(a, b):
return a + b

如果将其保存为模块 add_test.py,然后从交互式 Python session 中导入它,您可以尝试以下几项操作:

>>> from add_test import add
>>> add(5, 2)
7

这按预期工作。

>>> add(5, 'x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/z/add_test.py", line 4, in add
return a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'

这会在 add() 函数内引发 TypeError (在第 4 行,如上面的回溯告诉您的那样),因为您无法添加整数 5 和字符串 'x' 在一起。

如果您愿意,您可以捕获此异常并打印某种消息:

# add_test_2.py

def add_exc(a, b):
try:
return a + b
except TypeError:
print("cannot add %r and %r." % (a, b))

...它会按预期运行:

>>> from add_test_2 import add_exc
>>> add_exc(5, 'x')
cannot add 5 and 'x'.

但是,当你完全错过一个论点时,就会发生不同的情况:

>>> add(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() missing 1 required positional argument: 'b'

这会立即引发 TypeError,甚至无需尝试执行 add() 中的代码,因为当您定义 add() 时,您指定了它只需要两个参数:ab。你的函数说“我只能用两个参数调用”,所以Python遵循这个规则。

由于在第二个示例中您没有为 Python 指定 b 的值,因此如果调用该函数,该函数就没有任何意义,并且 Python 知道这一点,因此它拒绝尝试做一些没有任何意义的事情。

看待这个问题的一种方法是,在上面的两个示例中,您会收到两种不同类型的 TypeError:

  • 当您调用 add(5, 'x') 时,问题在于 5'x' 是无法相加的东西,并且在违反该规则的那一刻您会收到 TypeError

  • 当您尝试调用 add(5) 时,问题在于 add() 是一种必须使用两个参数调用的函数类型,当您违反规则时,即在函数启动之前,您会收到一个TypeError

关于python - 如果我只给这个函数一个参数,为什么异常处理不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com