当 被调用对象 遇到执行错误时,如何返回给调用者比较好?
有三种方式:
a. 什么都不处理,直接报错
这种方式显然是不合理的b. 针对某种情况返回一个特定值,举个例子
def divide(a, b):
if b == 0:
return -1
if type(a) not in(int, float) or type(b) not in (int, float):
raise ValueError("divide function called with bad args")
else:
return a/b
如果c. 捕获异常divide
函数这样写,会有四个弊端:
1)繁琐
针对三种返回结果,现在call_divide
函数如果调用它,就必须对三种调用结果进行判断,然后处理逻辑。那如果还有call_call_divide
函数调用call_divide
呢?这意味着后面的整个调用链都必须为这种“不同情况的特定返回值”进行判断,这是非常繁琐的。
2)不好维护和修改
而如果divide
函数有所变化,那后面的调用链还必须跟着变化,这很不好维护和修改。
3)降低效率
每次执行divide
,都要走一遍if……if……
实现方式如下:
def divide(a, b):
try:
res = a / b
except ZeroDivisionError:
res = 'NaN'#这里也可以raise
except:
raise ValueError("divide function called with bad args")
return res
【捕获异常Exceptions】将精力都放在抽象计算过程上,而不是放在考虑if,只是遇到异常,我们怎样处理。
此时调用函数,可以这样写:
def call_divide():
try:
print(divide(3,0))
print(divide(3,4))
print(divide(3,'4'))
except Exception as e:
print(e)
调用方,也不需要if……if
推荐阅读
- 数据库|数据库并发操作的一致性问题
- 解决tomcat启动后又停服的一种情况
- JAVA|JUnit 4教程入门
- DoNet|C# 编写COM
- 性能优化|大型网站性能优化 一 C#高效编码的优化 系统
- java|为啥阿里巴巴规定要在 @Transactional 指定 rollbackFor()
- weblogic|weblogic——Servlet failed with Exception