什么是异常
运行的代码出现不符合代码逻辑情况解释器就会停止运行,并且给出报错信息,这就是异常
异常有什么用?
获取到异常信息可以让我们快速定位错误原因
为什么要捕获异常
为了不让出现异常时程序终端结束运行并报错,我们就可以通过捕获异常来对可能出现的情况进行处理,提高了代码的质量
try:
# 可能出现异常的代码
print(a)
# 出现异常会执行的代码
except:
print('出现错误了')
>>出现错误了
# 先尝试运行print,以为里面的变量我没有定义,所以会出现异常并报错,然后except就会执行,并且输出except下的print函数
捕获指定异常
try:
print(a)
except NameEeeor as e:
print(e)
>>name 'a' is not defined
# 由于变量a没有定义,所以运行print(a)就会报错,程序会自动抛出异常,然后在通过except指定NameError这个异常就可以捕获到程序抛出的异常信息
捕获所有异常
# 当然异常也分很多种,NameError只是其中一种异常类,所以想要捕获所以类型的异常可以这样写
try:
print(a)
except Exception as e:
print(e)
>> name 'a' is not defined
try:
print(1/0)
except Exception as e:
print(e)
>>division by zero
# 因为Exception是所有异常类的父类,所以通过这个父类可以捕获所有python定义过的异常信息
自定义异常
# 虽然Exception可以捕获所有python定义了的异常信息,但是我们自己在写代码的过程中希望能够自己定义一些异常,这样可以方便我们自己修改程序和读取程序
# 这里我自己定义了一个字符串长度异常类,当然了,这个异常类是继承Exception这个父类的,这样才能通过Exception来捕获自定义的异常类的异常信息
class ShortIndexError(Exception):
def __init__(self,lenth,minlenth):
self.lenth = lenth
self.minlenth = minlenth
# 当调用自定义异常类并print(异常类)的时候会获取一个异常信息返回值
def __str__(self):
return f'你的字符串长度是{self.lenth},不能低于{self.minlenth}'
def login():
try:
password = input('请输入你的密码:')
# 当我输入的字符串长度满足我自己写的代码异常逻辑时,就抛出该异常
if len(password) < 6:
# 通过raise抛出了我自己定义的异常类
raise ShortIndexError(len(password), 6)
# 捕获自定义的异常类
except Exception as e:
# 打印捕获到的异常信息
print(e)
login()
>>请输入你的密码:123
>>你的字符串长度是3,不能低于6
异常的else,finally
#else是正常执行没有异常时才会执行
try:
print('hello word')
except Exception as e:
print(e)
else:
print('这段程序没有异常')
finally:
print('不管它错与不错我都要执行')
>>hello word
>>这段程序没有异常
>>不管它错与不错我都要执行
#finally是不管有没有异常都会执行
try:
print(num)
except Exception as e:
print(e)
else:
print('这段程序没有异常')
finally:
print('不管它错与不错我都要执行')
>>name 'num' is not defined
>>不管它错与不错我都要执行