例外处理

2020-10-23 14:52:25 浏览数 (1)

一、例外处理Exception

代码运行可能会意外出现各种错误:

• 语法错误:Syntax Error

• 除以0错误:ZeroDivisionError

• 列表下标越界:IndexError

• 类型错误:TypeError…

事先无法预料,如:

• 由用户输入/交互引起

• 由外部数据引起

• 由设备连接等引起

二、例外处理Exception Handling

• 错误会引起程序中止退出

• 如果希望掌控意外,就需要在可能出错误的地方设置陷阱捕捉错误:try: # 为缩进的代码设置陷阱,except: # 处理错误的代码,else: # 没有出错执行的代码,finally: # 无论出错否,都执行的代码。

三、推导式comprehensions

可以用来生成列表、字典和集合的语句

• [<表达式> for<变量> in <可迭代对象> if<逻辑条件>]

• {<键值表达式>:<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}

• {<元素表达式>for <变量> in <可迭代对象>if <逻辑条件>}

四、用推导式替代map/filter函数

• 函数式编程被认为不太pythonic,推导式可以替代map/filter函数

• map函数的替代:map(func,list),[func(x) for x in list]

• map(func, list1, list2)

• [func(x,y) for x,y in zip(list1, list2)]

• filter函数的替代:filter(func,list),[x for x in list if func(x)]

五、替代reduce函数

• 需要一个迭代循环才能替代reduce函数,result = reduce(function, iterable, start) ,相当于:

• result = start

• for x in iterable: • result =function(result, x)

六、生成器推导式generator

与推导式一样语法:

• (<元素表达式>for <变量> in <可迭代对象>if <逻辑条件>)

• 返回一个生成器对象,也是可迭代对象

• 但生成器并不立即产生全部元素,仅在要用到元素的时候才生成,可以极大节省内存

七、生成器函数

• 如果生成器较复杂,一行表达式无法容纳,可以定义生成器函数

• 生成器函数的定义与普通函数相同,只是将return换成 了yield

• yield语句会立即中止函数执行,返回一个值

• 但在下一次迭代生成器函数的时候,会从yield语句后的语句继续执行,直到再次yield返回,或终止

• return语句也会立即中止函数执行,返回一个值

• 但它会终止函数的执行,下次调用函数会重新执行函数

0 人点赞