定义一个求商函数,要点是分母不能为0:
def divide(a, b):
try:
return a/b
except ZeroDivisionError as e:
return None
人们这样调用这个函数:
result = divide(x, y)
if not result:
print("Invalid inputs")
else:
print(result)
这个函数的缺陷在于当分子为0时,本应输出为0的result被判断为False而输出Invalid inputs
另一种写法:
def divide(a, b):
try:
return a/b
except ZeroDivisionError as e:
raise ValueError("Invalid inputs") from e
为了应对这种抛出异常的函数(抛出异常应写入开发文档),调用者就不会像上面一样调用了
try:
result = divide(x, y)
except ValueError:
print("Invalid inputs")
else:
print(result)
要点:
- 用None表示返回值容易使调用者犯错,因为None、0、空字符串在条件表达式里都为False。
- 函数遇到特殊情况时,应抛出异常,而不要返回None,调用者看到文档中所描述的异常后,就会编写相应的代码来处理它们了。
wtx
网友评论