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

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不是叠加,只接受最后一个错误。

posted @ 2017-06-27 21:44  Seiei  阅读(106)  评论(0编辑  收藏  举报