【发布时间】:2019-09-18 10:22:44
【问题描述】:
我有一个函数,我将它传递给另一个函数:
def func1(a, b):
return a/b
第二个函数用于处理类似于func1 引发的异常:
def func2(func):
try:
return func
except ZeroDivisionError as e:
print("0")
如果我通过了
func2(func1(1,2))
正如预期的那样,输出为0.5。但是,func2(func1(1,0)) 会引发 ZeroDivisionError 未被 except 语句捕获:
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input> in <module>
----> 1 func2(func1(1,0))
<ipython-input> in func1(a, b)
1 def func1(a, b):
----> 2 return a/b
ZeroDivisionError: division by zero
谁能解释一下为什么在这个例子中没有输入 except 块?
def func3(a,b):
try:
a/b
except ZeroDivisionError as e:
print("0")
输入func3(1,0) 返回0,正如预期的那样。
背景:我有一个包含多个 API 调用的代码,有时会返回连接错误。我想将所有这些调用放在一个函数中,该函数会在几秒钟后尝试重试。
【问题讨论】:
-
实际计算发生在一个
func1。所以使用func1上的异常处理程序@ -
在func1中使用try except,因为func2只会返回func1的输出,不需要try-except。
-
这就是我在
func3中所做的。但是,我有许多类似于func1的功能,它们都应该以相同的方式处理(即通过func2)
标签: python function exception return try-catch