600X笔记(week-4 调试、断言和异常)

来源:互联网 发布:支配集网络matlab算法 编辑:程序博客网 时间:2024/06/05 08:01

600x感觉讲得更偏向于导论,这么快调试、断言和异常了。
嗯。。让我想想廖大的教程顺序应该是先数据类型,条件判断,循环,函数(函数的参数),递归函数,高级特性(然后里面有生成器、迭代器),高阶函数(闭包、装饰器、偏函数),模块,面对对象编程(类和实例),面对对象高级编程(定制类),然后再到调试、断言异常。
这里直接上几个代码加深印象:

def FancyDivide(numbers, index):    try:        try:            denom = numbers[index]            for i in range(len(numbers)):                numbers[i] /= denom        except IndexError as e:            FancyDivide(numbers, len(numbers) - 1) #会再一次调用Finally        else: #当上一个语言块没有被执行时执行            print ("1")        finally:            print ("0")    except ZeroDivisionError as e:        print ("-2")

上式的FancyDivide([0, 2, 4], 4)答案是1,0,0,注意顺序:是先输出else的1,然后输出因错误返回的Finally,最后输出最外层的Finally

#最初输出错误含'Hello'def FancyDivide1(list_of_numbers, index):    try:        try:            denom = list_of_numbers[index]            for i in range(len(list_of_numbers)):                list_of_numbers[i] /= denom        finally:            raise Exception("Hello")    except Exception as e:        print(e)#最后输出错误含'Hello'def FancyDivide2(list_of_numbers, index):    try:        try:            raise Exception("Hello")        finally:            denom = list_of_numbers[index]            for i in range(len(list_of_numbers)):                list_of_numbers[i] /= denom    except Exception as e:        print(e)

使用FancyDivide([0, 2, 4], 0)比较上面代码可以看出except不是叠加,只接受最后一个错误。