1 异常概念
当检测到⼀个错误时,解释器就⽆法继续执⾏了,反⽽出现了⼀些错误的提示,这就是所谓的"异常"。
例如:以 r ⽅式打开⼀个不存在的⽂件。
f=open('test.txt','r')
Traceback (most recent call last):
File "E:01异常测试.py", line 4, in <module>
f=open('test.txt','r')
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
2 异常的写法
异常的语法如下,except相当于捕获了所有的异常,且当异常发生时,将执行except内的语句。
try:
可能发⽣错误的代码
except:
如果出现异常执⾏的代码
例如,我们可以在以r访问模式读取txt文件出现异常时,通过异常处理,改为通过w访问模式读取txt文件。
try:
f=open('test.txt','r')
#发生异常时,执行except中的语句
except:
f=open('test.txt','w')
3 捕获指定异常
语法如下。
try:
可能发⽣错误的代码
except 异常类型:
如果捕获到该异常类型执⾏的代码
我们可以将未命名的变量num进行打打印,以此来产生NameError异常,并接收。
try:
print(num)
except NameError:
print("错误")
except:
print("未知异常")
错误
4 捕获多个指定异常
try:
print(1/0)
except (NameError,ZeroDivisionError) :
print("有错误")
except:
print("不知道啥情况")
有错误
4 打印异常信息
在捕获多个异常,有时我们不知道究竟发生了哪个异常,这时候我们就可以通过打印异常信息进行判断。
try:
print(num)
#捕获异常信息
except (NameError,ZeroDivisionError) as result:
print(result)
except:
print("不知道啥情况")
name 'num' is not defined
5 捕获所有异常
我们可以通过所有程序异常类的父类Exception来捕获所有异常。
try:
print(1/0)
except Exception as result:
print(result)
print("异常已经被捕获")
division by zero
异常已经被捕获
5 else语句
当没有异常发生时,程序将会执行else中的语句。且只有进行了异常的捕获(及except语句存在),书写else语句才不会报错。
try:
print("hello")
#捕获异常
except Exception as result:
print(result)
#只有进行了异常的捕获才能进行else
#异常没有发生时执行
else:
print("没有发生异常")
hello
没有发生异常
6 finally语句
finally表示的是⽆论是否异常都要执⾏的代码,例如关闭⽂件。
try:
f=open('test.txt','r')
except Exception as result:
print(result)
f=open('test.txt','w')
finally:
f.close()
7 自定义异常
我们可以通过一个例子来体验如何自定义异常。
我们让程序开始时要求用户输入一串密码,若密码长度小于3则抛出自定义的异常。
自定义异常需要实现__init__方法和__str__方法,分别用来初始化与打印异常信息。
class ShortNameException(Exception):
def __init__(self,length,minLen):
self.length=length
self.minLen=minLen
def __str__(self):
return f'你输入的长度为{
self.length},不能少于{
self.minLen}'
try:
code=input("请输入你的密码\n")
if(len(code)<3):
raise ShortNameException(len(code),3)
except ShortNameException as result:
print(result)
finally:
print("结束")
请输入你的密码
23
你输入的长度为2,不能少于3
结束
转载:https://blog.csdn.net/Demon_LMMan/article/details/117399382
查看评论