Exception异常(捕获、抛出、断言)

it2023-07-10  65

异常

1.概念

''' a.一般情况下,当程序运行的时候出现的错误被称为异常【Exception】 b.异常一般是使用类表示,如IndexError就是一个表示索引越界的异常类, 异常的父类是BaseException或者Exception【object】 c.当程序在运行的过程中遇到了异常,而且该异常未被处理,程序会被终止出现异常的代码 处,后面的代码将没有机会执行 d.在Python中,处理异常的思想:暂时跳过异常的代码,让后面的代码有执行的机会 e.异常在代码中的出现只是一种可能性 '''

2.常见异常

# 1.NameError:当使用了一个未被定义的变量 # 2.ValueError:传入一个不期望的值,即使类型是正确的 # 3.TypeError:传入的数据类型不相符 # 4.IndexError:当列表,元组,字符串等遍历元素的过程中出现下标越界 # 5.AttributeError:访问了一个对象未定义的属性或者函数 # 6.UnboundLocalError:不同作用域下的变量重名的时候,访问了一个还未被定义的局部变量,跟global、nonlocal有关 # 7.FileNotFoundError:在访问系统文件的时候,一般是需要读取文件内容的时候,如果文件不存在,则报错 # 8.LookupError:编码格式错误 # 9.KeyboardInterrupt:ctrl + c 被按下,强制结束 # 10.SyntaxError:Python代码非法,基本的语法错误 # 11.ModuleNotFoundError:模块的名称错误

3.异常处理方式

try-except-finally/else捕获【常用】

""" 根据具体的需求,try-except-finally/else有不同的书写形式 a.try-except b.try-except-else c.try-except-finally d.try-finally e.try-except-except-except-except-except-..... 注意: a.将可能存在异常的代码书写到try代码块中,监测起来 b.如果try中的代码出现异常,肯定会执行相应的except语句;如果try中的代码没有异常,会跳过except语句 c.不管try中的语句是否存在异常,finally语句肯定都会被执行 """ # 1.try-except:只设定一种异常 try: # 可能存在异常的代码 num = int(input("请输入:")) print("hello") except ValueError as e: # 为了提高效率,异常的类中都已经重写了__str__ print(e,type(e)) # 2.try-except:设定多种异常 # 注意1:try中如果可能出现多种异常,都只会处理其中的一个异常 # 注意2:类似于if-else的多分支,如果try中出现异常,会从上往下依次匹配相应的except语句 try: num = int(input("请输入:")) list1 = [45,57,6] print(list1[num]) except ValueError as e: print("value:",e) except IndexError as e: print("index:",e) # 3.try-except:父类 # 注意:except中的异常类型出现父类,而且出现在中间或者前面,会将所有的异常全部处理,这是多态的体现 try: num = int(input("请输入:")) list1 = [45,57,6] print(list1[num]) except BaseException as e: print("base:",e) except ValueError as e: print("value:",e) except IndexError as e: print("index:",e) try: num = int(input("请输入:")) list1 = [45,57,6] print(list1[num]) except IndexError as e: print("index:",e) except BaseException as e: print("base:",e) # 4.try-except:省略错误类型 # 注意:可以捕获任何类型的异常,但是,不能进行异常的信息描述 try: num = int(input("请输入:")) list1 = [45, 57, 6] print(list1[num]) except: print("出现了异常") # 5.try-except:选择性的指明异常类型 # 注意:只能捕获指定类型的异常 try: num = int(input("请输入:")) list1 = [45, 57, 6] print(list1[num]) except (IndexError,ValueError,AttributeError,NameError): print("出现了异常") # 6.try-except-else # 注意:else语句的执行时机:只有当try中的代码没有异常的时候才会执行 try: num = int(input("请输入:")) print("hello") except ValueError as e: print(e) else: print("else被执行了") # 7.try-except-finally # 注意:不管try中有无异常,finally都会被执行 try: num = int(input("请输入:")) print("hello") except ValueError as e: print(e) finally: print("finally被执行了") # 8.try-except-finally,在try或者except中出现return # 注意:如果函数中使用try-except-finally语句,并且try或者except中使用了return,finally仍然会被执行 def test(): try: num = int(input("请输入:")) # return print("hello") except ValueError as e: print(e) return print("fahj") finally: print("finally被执行了") test() # 9.函数中出现异常,有两种捕获方式 # a.在函数体中捕获 def test(): try: num = int(input("请输入:")) print("hello") except ValueError as e: print(e) test() # b.捕获函数的调用 def test(): num = int(input("请输入:")) print("hello") try: test() except ValueError as e: print(e)

raise抛出

# Python异常的处理方式:捕获和抛出 """ try-except 函数 1 raise xxx 函数2 函数2 raise xxx 异常 """ # raise # 在程序中异常出现的形式 # 1.根据具体的问题出现【异常对象】 try: l1 = [34, 65, 6, 57] print(l1[19]) except IndexError as e: print(e) # 2.可以通过异常类创建异常的对象 # 语法:raise 异常类("描述信息"),raise常用于自定义异常 try: raise IndexError("出现了索引越界的异常") except IndexError as e: print(e)

assert断言

def div(x,y): # 语法:assert 表达式 ,异常信息描述 # 工作原理:如果表达式成立,则代码正常执行,但是如果表达式不成立,则出现一个AssertionError assert y != 0,"y不能为0" return x / y print(div(5,2)) print(div(5,0))

嵌套定义

# 注意:在try-except语句中,一般情况下,在finally中可以继续进行书写try-except f = None try: f = open(r"file11111.txt", "r", encoding="utf-8") print(f.read()) except FileNotFoundError as e: print(e) except LookupError as e: print(e) except UnicodeDecodeError as e: print(e) finally: try: f.close() except AttributeError as e: print(e)

自定义异常

# 如果解决生活中的情景,系统的异常类型满足不了需求,则需要自定义异常 #【面试题:如何自定义一个异常类】 # a.自定义一个类,继承自BaseException或者Exception class MyException(BaseException): # b.书写构造函数,在其中定义实例属性 def __init__(self,msg): # c.调用父类的构造函数,主要是为了继承异常的机制 super().__init__() # msg用于记录异常的描述信息 self.msg = msg # d.重写__str__函数 def __str__(self): return self.msg # e.定义一个实例函数,用于解决出现的问题 def handle(self): print("问题已解决") try: raise MyException("出现了异常") except MyException as e: print(e) e.handle()
最新回复(0)