目录
一、例外处理
1.代码错误
程序的逻辑错误、用户输入不合法等都会引发异常,从而导致程序的崩溃
可以利用python提供的异常处理机制,在异常出现时及时捕获并处理
a.语法错误:SyntaxError
b.除以0错误:ZeroDivisionError
c.列表下标越界:IndexError
d.类型错误:TypeError
e.访问变量不存在:NameError
f.字典关键字不存在:KeyError
g.未知的变量属性:AttributeError
2.捕捉错误
a.try-expect语句
try:
<检测语句>
expect <错误类型>[as e]:
<处理异常>
try:#为缩进的代码段设置陷阱
except:#处理错误的代码
针对不同的异常可以设置多个expect
b.try-finally语句
try:
<检测语句>
expect <错误类型> [as e]:
<处理异常>
finally:
<语句块>
finally:#无论是否出错,都执行的代码
c.else语句
try:
<检测语句>
expect <错误类型> [as e]:
<处理异常>
else:
<语句块>
else:#未出错时执行的代码
二、推导式
1.概念
推导式是从一个或多个迭代器快速简洁的创建数据结构的一种方法
将循环和条件判断结合,从而避免语法冗长的代码
可以用来生成列表、字典和集合
2.基本语法
列表推导式:
[<表达式> for <变量> in <可迭代对象> if <逻辑条件>]
字典推导式:
{<键值表达式>:<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}
集合推导式:
{<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>}
3.生成器推导式
(<元素表达式> for <变量> in <可迭代对象> if <逻辑条件>)
返回一个生成器,对象也是可迭代对象
但生成器并不立即产生全部元素,仅在要用到元素的时候才生成,可以极大节省内存
三、生成器
1.概念
生成器是用来创建数据序列的一种对象
使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列
通常生成器是为迭代器产生数据的,是迭代器的一种实现
2.生成器函数
如果要创建一个比较大的序列生成器,推导式会比较复杂,一行表达式无法容纳,这时可以定义生成器函数
生成器函数的定义与普通函数相同,只是将return换成了yield
3.yield与return
yield:
立即返回一个值
下一次迭代生成器函数时,从yield语句后的语句继续执行,直到再次yield返回或终止
return:
终止函数的执行,下次调用会重新执行函数
4.协同程序
可以运行的独立函数,调用函数可以暂停或挂机,并在需要的时候从离开的地方继续或重新开始
四、上机练习
第一个:输出商
a=input()
b=input()
try:
a/b
isinstance(a,int)
isinstance(b,int)
except ZeroDivisionError as e :
print("ZeroDivisionError:",e)
except TypeError as e:
print("TypeError:",e)
else:
print(a/b)
第二个:勾股数
[print(i,j,k) for k in range(101) for i in range(1,k+1) for j in range(i,k) if i*i + j*j==k*k]
第三个:斐波那契数列
def fib():
a=0
b=1
for i in range(100):
c=a+b
yield b
a,b=b,c
for d in fib():
print(d)
if d>1000:
break