python----有关异常的基础
2021/8/8 9:06:18
本文主要是介绍python----有关异常的基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
异常捕获
-
使用try和except可以捕获异常,也就是在出现异常后不会将代码终止运行,而是执行except中的代码处理异常
# 异常捕获:通过代码将可能出现异常的文件放入try中,然后如果出现异常就执行except中的命令 ''' 格式: try: 可能出现异常的代码 except: 如果出现了异常,就执行其中的代码 ''' # 需求:读取文件,如果文件不存在,则以写入方式打开 # 如果我们try中的代码出现了异常,则执行except中的命令 # 如果我们try中的代码没有出现异常,则不会执行 try: file = open('test.py', 'r') except: file = open('test.py', 'w') # 在正常的Python开发中基本每个函数中都要出现一次异常捕获 # 代码健壮性:代码抵御异常的能力
捕获指定类型的异常
-
在except后边添加异常类型,就可以捕获指定类型的异常
-
如果我们想要捕获多种异常
-
可以在except后边添加多个异常类型,中间用逗号隔开,但是需要用括号包裹,变成一个元组
-
可以书写多个except
-
-
如果所有的异常类型都无法捕获到该异常, 或者我们需要捕获未知类型的异常,可以使用Exception
# try: # # NameError: name 'a' is not defined # # 如果先出现NameError 我们的后边一句没有办法执行 ZeroDivisionError没有办法捕捉到 # # print(a) # print(1/0) # # 如果想要捕获指定异常,就在except 后边添加异常的类型 # except ZeroDivisionError: # 这种方式只能捕获指定异常 # print('出现异常了!!!') # 在出现异常后, NameError和 ZeroDivisionError 之类的Error就是异常类型 # ZeroDivisionError: division by zero # print(1/0) # NameError: name 'a' is not defined # print(a) # 能不能同时捕获多种异常呢? 可以 # 方法一:在except后边添加多个异常名称 # try: # # NameError: name 'a' is not defined # # 如果先出现NameError 我们的后边一句没有办法执行 ZeroDivisionError没有办法捕捉到 # # print(a) # print(1 / 0) # # 如果想要捕获指定异常,就在except 后边添加异常的类型 # except (ZeroDivisionError, NameError): # 这种方式只能捕获指定异常 # print('出现异常了!!!') # 方法二: 在try后边书写多个except # try: # # NameError: name 'a' is not defined # # 如果先出现NameError 我们的后边一句没有办法执行 ZeroDivisionError没有办法捕捉到 # # 在出现异常之后,后续代码将不会继续执行 # print(a) # print(1 / 0) # # 如果想要捕获指定异常,就在except 后边添加异常的类型 # except ZeroDivisionError: # print('出现ZeroDivisionError异常了!!!') # except NameError: # print('出现NameError异常!!') # 如果我们想要展示异常信息怎么办? # 异常信息就是异常类型冒号之后的注释 # 可以通过获取异常对象,并对异常对象进行打印,得到异常信息 # try: # print(a) # print(1 / 0) # # 如果想要捕获指定异常,就在except 后边添加异常的类型 # # 在异常类型之后添加上个as 变量名 这时候 变量就是异常对象,打印该对象就可以出现错误信息 # except ZeroDivisionError as error: # print(error) # division by zero # except NameError as error: # print('出现NameError异常!!', error) # 如果我们不知道异常类型是什么怎么办? # 可以使用Exception进行捕获,Exception是所有异常类的父类,可以捕获所有异常类型 try: print('2' + 1) print(a) print(1 / 0) except ZeroDivisionError as error: print(error) # division by zero except NameError as error: print('出现NameError异常!!', error) except Exception: print('出现了未知异常')
else 和 finally
-
else: try中控制的代码没有出现异常,则执行该结构内的代码
''' 格式: try: 可能会出现异常的代码 except: 在出现异常后执行该命令处理异常 else: 当没有出现异常时,执行该代码 ''' try: a = 1 print(a) except: print('出现异常了') else: # try中的代码正常执行没有任何异常,则执行else里边的代码 print('没有异常,虚惊一场')
-
finally:无论出现什么情况都会执行finally里边的代码,哪怕程序崩溃
''' try: 可能出现异常的代码 except: 代码出现异常后执行该代码处理异常 else: 如果try中的代码不出现异常,则执行其中的代码 finally: 无论如何都会执行finally中的代码 ''' # 无论任何情况,finally中的代码都要被执行 try: a = 1 print(a) print(1/0) except NameError: print('出现异常了') else: print('没有出现异常') finally: print('出现不出现异常都要执行') # 代码写到finally中,哪怕程序报错终止,代码依旧需要执行完成,但是写到try结构之外,程序报错终止将不会继续执行外部代码 print('try结构之外书写内容')
自定义异常抛出
-
自定义异常一定要继承自Exception
-
自定义异常可以使用raise抛出,可以进行捕获或者导致程序终止
-
raise可以抛出系统异常,也可以抛出自定义异常
# 自定义异常的逻辑 # 在自定义异常时,只要继承自Exception就可以当做异常抛出 # 继承后要重写 Exception方法,添加我们需要的内容 class PassWorldError(Exception): error_count = 0 def __init__(self, str): super().__init__(str) # 在此处可以添加自定义操作 PassWorldError.error_count += 1 # raise可以手动抛出异常,抛出异常后,可以直接终止程序,或者使用try except进行捕获 # raise可以抛出自定义异常,也可以抛出系统异常 try: password = input('请输入您的密码:') if len(password) < 6: raise PassWorldError('您的密码不足6位,请重新输入') # raise NameError('您的密码错误了') except PassWorldError as error: print(error) # raise PassWorldError('密码错误')
这篇关于python----有关异常的基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器