异常错误及处理

# ### 异常处理


# IndexError 索引超出序列的范围
# lst = [1,2,3]
# lst[1000]

# KeyError 字典中查找一个不存在的关键字
# dic = {"a":1,"b":2}
# dic["c"]

# NameError 尝试访问一个不存在的变量
# print(wangwen112312313123123123123123123123123123s)

# IndentationError 缩进错误
# if 5 == 5:
# print(1)
# print(2)


# AttributeError 尝试访问未知的对象属性
# class MyClass():
# a = 100
# obj = MyClass()
# obj.abc


# StopIteration 迭代器没有更多的值
# it = iter(range(3))
# res = next(it)
# res = next(it)
# res = next(it)
# res = next(it)

# AssertionError 断言语句(assert)失败
"""assert猜的意思 , 叫断言,
如果是正确的没有任何反应,代码正常执行
如果是错误的直接报错,终止程序
"""
# assert 5 < 3
# print(111)

 

# ### 异常处理的语法
"""
try .. except .. 来抑制错误
把又可能报错的代码放到try这个代码块当中,
如果有报错,直接执行except这个代码块
如果没有报错,不执行except这个代码块


在异常处理当中,所有的异常错误类都继承 BaseException Exception 普通异常的父类(了解)
# 类型上的子父关系
from collections import Iterator,Iterable
print(issubclass(Iterator, Iterable))
"""

# 1.基本语法
class MyClass():
    a = 6

try:
    lst = [1,2,3]
    lst[1000]
except:
    pass
    

try:
    lst = [1,2,3]
    lst[1000]
except BaseException:
    pass
    

# 2.带有分支的异常处理

try:
    # lst = [1,2,3]
    # lst[1000]
    
    # dic = {"a":1,"b":2}
    # dic["c"]
    
    # print(lisi)
    
    MyClass.abc()
except IndexError:
    print("下标越界1")
except KeyError:
    print("字典的键不存在2")
except NameError:
    print("这个变量不存在的3")
except :
    print("有异常错误4")


# 3.处理生成器的异常报错
def mygen():
    yield 1
    yield 2
    yield 3
    return [1,2,3]

try:
    gen = mygen()
    print(next(gen))
    print(next(gen))
    print(next(gen))
    print(next(gen))
    
    # 给StopIteration这个类创建出来的对象起一个别名叫e
    """ 
    当你打印对象时,会触发内部__str__方法,通过一些列的调用,返回出最后的返回值
    """
except StopIteration as e:
    # 可以获取返回值
    print(e)
    
    """
    # 额外的扩展
    res = str(e)
    print(res , type(res) ,  "<======>")
    res2 = eval(res)
    print(res2,type(res2))
    """

# 4.异常处理的其他写法
"""
1 .try .. except .. else ..
当try这个代码块当中没有报错的时候,执行else这个分支
如果try代码块有报错,就不执行else这个分支
"""
try:
    # lst = [1,2,3]
    # lst[1000]
    print(123)
except:
    pass
else:
    print("执行了else分支 ... ")

"""
2.try .. finally ... 无论代码是否报错,都必须要执行的代码写在finally这个代码块当中
场景:应用在异常环境下,保存数据或者关闭数据库等操作,必须要在数据库程序崩溃之前执行的代码写在finally代码块中;
"""

"""
try:
    lst = [1,2,3]
    lst[1000]
finally:    
    print(234678)
"""
    
"""3.try .. except .. else .. finally .. """

try:
    lst = [1,2,3]
    lst[1000]
    # print(123)
    
except:
    print(456)
    
else:
    print("执行了else分支 ... ")
finally:
    print("执行关闭数据库操作")

 

上一篇:自动化测试时对验证码的处理


下一篇:python学习笔记五 — 异常与异常处理