ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

python-day06-如何处理异常?

python-day06-如何处理异常? 目录一、异常1.1.认识异常1.2.异常的分类1.3.捕获异常单个except块1.4.捕捉异常多个except代码块1.5.try-except嵌套1.6.使用finally代码释放资源二、自定义异常2.1.自定义异常新建异常类2.2.raise抛出异常一、异常1.1.认识异常程序在运行中总会发生一下意想不到的错误信息。为增强程序的健壮性我们也需要考虑异常处理方面的内容。例如在读取文件时需要考虑除法中分母不能为0、文件不存在、文件格式不正确等异常情况。例如i input(请输入数字) n 8888 result n / int(i) print(result) print(f{n}除以{i}等于{result})1.2.异常的分类在python中异常类的命名主要后缀都有如Exception、Error和warning也有少数几个没有采用这几个后缀命令。包括StopIteration、StopAsyncIteration、SystemExit、KeyboardInterrupt 和 GeneratorExit。特殊异常为什么不带 Error/Exception 后缀触发场景StopIteration它是“流程控制”信号而非“错误”。它告诉 for 循环“迭代器里没东西了该结束了。”当你用 next() 取完迭代器的最后一个元素时抛出。KeyboardInterrupt它是“用户交互”信号而非代码错误。代表用户主动中断。你在命令行按下 Ctrl C时抛出。SystemExit它是“退出”信号由 sys.exit()触发。目的是让解释器安全关闭。调用 sys.exit() 时抛出。GeneratorExit它是“垃圾回收”信号。当生成器对象被销毁时触发用于通知生成器执行清理工作。生成器被垃圾回收时抛出。1.3.捕获异常单个except块异常捕获是通过try-except语句实现的基本的try-except语句的语法如下。在 try 代码块中包含可能引发异常的语句。如果没有发生异常则跳过 except 代码块继续执行如果发生了异常则程序立即跳转到对应的 except 代码块执行这就是异常捕获。try:可能会引发异常的语句except [指定异常类型1] [as e]处理异常注意as e其中的e是异常对象是一个变量try-except语句的执行流程如下。注意1except 后边跟异常类型异常类型可进行指定如果不进行指定表示可以捕捉所有异常。注意2如果不指定具体的异常数据类型则except语句可以捕获在try中发生的所有异常。如果指定具体的异常类型则except语句只能捕获在try中发生的指定类型的异常。在Python中推荐在except语句中指定具体的异常类型。例如不加as e的情况下i input(请输入数字) n 8888 try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError: print(除法运算中分母不能为0)从运行的结果可以看出在输入数字0后异常发生跳到except代码块执行。例如加as e的情况下i input(请输入数字) n 8888 try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e})对比就可以看出except ZeroDivisionError as e,其中e代表的就是异常抛出的具体值。1.4.捕捉异常多个except代码块语法:try:可能会引发异常的语句except 异常类型1处理异常except 异常类型2处理异常.....except:处理异常多条语句可能会引发多种不同的异常对每一种异常都会采用不同的处理方式。针对这种情况我们就可以在try后边跟多个except代码块语法如下i input(请输入数字) n 8888 try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: print(f输入的是无效数字异常{e}) except: print(抛出异常)1.5.try-except嵌套try-except还可以嵌套其实它的用法完全可以类比if elif 来进行理解也是可以多层的嵌套。例如 input(请输入数字) n 8888 try: i2 int(i) try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: print(f输入的是无效数字,不能将输入字符串正常转为数字发生异常{e}) except: print(抛出异常)1.6.使用finally代码释放资源有时在try-except语句中会占用一些资源例如打开的文件、网络连接、打开的数据库及数据结果集等都会占用计算机资源需要程序员释放这些资源。为了确保这些资源能够被释放可以使用finally代码块。在try-except语句后面还可以跟一个finally代码块语法如下注意无论是try代码块正常结束还是except代码异常结束都会执行finally代码块。i input(请输入数字) n 8888 try: i2 int(i) try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: print(f输入的是无效数字,不能将输入字符串正常转为数字发生异常{e}) except: print(抛出异常) finally: # 资源释放相关代码 print(无论如何我都执行)二、自定义异常很多情况下很多公司为了提高代码的可重用性自己编写了一些Python类库其中自已编写了一些异常类。实现自定义异常类需要继承Exception类或其子类。之前我们遇到的ZeroDivisionError和ValueError异常都属于Exception的子类。2.1.自定义异常新建异常类例如# 自定义类(继承Exception)命名为zidingyiExcption class zidingyiExcption(Exception): def __int__(self,message): super().__init__(message)2.2.raise抛出异常# 自定义类(继承Exception)命名为zidingyiExcption class zidingyiExcption(Exception): def __int__(self,message): super().__init__(message) i input(请输入数字) n 8888 try: i2 int(i) try: result n / int(i) print(f{n}除以{i}等于{result}) except ZeroDivisionError as e: print(f除法运算中分母不能为0,异常的的具体信息为{e}) except ValueError as e: # print(f输入的是无效数字,不能将输入字符串正常转为数字发生异常{e}) raise zidingyiExcption(你的输入法多少有点问题) except: print(抛出异常) finally: # 资源释放相关代码 print(无论如何我都执行)#
返回列表