3.17学堂在线python学习笔记
asdasda
重要笔记
Assertion和控制流的关系
-
在python中,抛出异常作为一种检测和控制代码流的重要方式
-
一个例子帮我们理解怎么样用这些异常来传递参数
-
三个上面例子的赋值案例和结果(蓝字)
-
简单思考一下,为什么这种序号③里面的案例很方便?如果我们仅仅使用②当中的错误处理器来处理所有错误,做一个脚本式的代码的话,不仅效率低,使得代码更难读,而且很容易出错误。
-
如果一味坚持用传统代码,结果将会是这样(一团糟,对吧))
Assertions
- 如果我们只想确认计算的假设达到了,我们仅仅使用Assertion就可以了
- 仅仅在代码当中“插入”有关“断言”的代码就可以检测代码运行到这块的时候假设条件有没有满足?如果没有满足直接抛出一个异常,从本质上来说这是处理异常更简单的方式,也是防御式编程的好例子
assert not 1+1>0
print('succeeded')
这个就会抛出AssertionError
assert 1+1>0
print('succeeded')
这个就会正常运行出'succeeded'
- 这么看assert确实是一个非常好用的断言语句,像下面的例子就是很谨慎地检查输入和输出的方式,也叫前置条件和后置条件检查,这样不仅能够防止输入错误,还能捕获到可能发生的意外,当然,相比try…except方式,它丧失了一点点效率,因为每次开始就强制检查是否满足条件,不像try遇到了错误再去看是什么错误
- 小例子测试assertionError
- 如果输入
Normalize([0, 0, 0])
当然结果就会是
AssertionError: Cannot divide by 0
def Normalize(numbers):
max_number = max(numbers)
assert(max_number != 0), "Cannot divide by 0" #这个地方很棒,又能输出错误还能输出错误注释
for i in range(len(numbers)):
numbers[i] /= float(max_number)
assert(0.0 <= numbers[i] <= 1.0), "output not between 0 and 1"
return numbers