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
    '''
posted @ 2021-08-19 19:30  zhiy  阅读(33)  评论(0)    收藏  举报