python 异常
python 异常
异常的作用 是为了 保证程序的健壮性
使用
try:
x= 10/0
print('111')
except Exception as e:
print(e) # 如果程序出错了 会执行 except里的代码
else:
print('程序没有出错会执行else里的代码')
finally 的使用
try:
x= 10/1
print('111')
except Exception as e:
print(e) # 如果程序出错了 会执行 except里的代码
finally: # 无论如何finally 中的代码都会运行 只要不强制退出 注意 finally函数里有返回值 会覆盖之前的返回值
print('nihao')
with 关键字
称为上下文管理器 很多需要手动关闭的连接 比如 socker 数据库 都能使用with关键字自动关闭连接
with open('qqq',encoding='utf8',mode='r') as file: # with 语句后的的对象都要有 __ enter__() 和 __exit__() 方法 进入时 会调用 __enter__() 方法 退出时会调用 __exit__() 方法
file.read()
# file.close() 不用手动关闭了 with 自动关闭
with 原理
class Demo:
def __enter__(self):
print('hhh')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('...')
del self
# d = Demo.__enter__(self) d 的值不是对象实列 而是 通过__enter__方法返回回来的 as 是取一个别名
with Demo() as d:
print(d)
'''
hhh
<__main__.Demo object at 0x000002513340E2B0>
...
'''
自定义异常
# raise 抛出异常
class MyException(Exception):
def __init__(self,info):
self.info = info
def __str__(self):
return self.info
a = 10
if a<20:
raise MyException("自定义异常") # raise 抛出异常
迭代器
# 迭代器 在python中 所有可以被迭代的对象 都有 __iter__ 这个方法 而 __iter__ 这个方法调用 __next__ 方法来遍历
class Demo:
def __init__(self,n):
self.n = n
self.index = 0
def __iter__(self):
return self
def __next__(self):
self.index += 1
if self.n > self.index:
return self.index
else:
raise StopIteration # 关闭迭代器
a = Demo(10)
for i in Demo(10): # 所有的对象只要有 __iter__方法那么他就是一个可迭代的对象 而 __iter__ 方法 调用的是__next__方法进行遍历 每迭代一次 都会调用一次# # next方法
print(i)
''' 输出
1
2
3
4
5
6
7
8
9
'''