异常是指在语法正确的前提下,程序运行时报错就是异常。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
捕获异常
捕获异常的语法:
try:
...代码1...
...代码2...
...代码3...
except 异常类型:
try中一旦检测到异常,就执行这个位置的逻辑
注意:
如果发生的异常类型和捕获的异常类型不相同,还是不能捕获异常,程序还会结束。
try:
print(41 / 0)
except ZeroDivisionError:
print("除零错误!")
捕获多个异常
多分支结构格式:
try:
执行的代码...
except 异常类型:
捕获异常1
except 异常类型 :
捕获异常2
except 异常类型:
捕获异常3
...
捕获到第一个异常,就结束了,不会捕获剩余的异常
try:
print(1/0)
except ZeroDivisionError:
print("除零错误!")
except IndexError:
print("索引错误!")
元组形式结构:
try:
执行的代码...
except(异常类型1,异常类型2,异常类型3):
捕获异常...
try:
lst = [1, 2]
print(1 / 0)
print(lst[2])
except (ZeroDivisionError, IndexError):
print("报错啦")
获取异常的信息描述
格式如下:
try :
执行代码...
except 异常类型 as 变量名:
执行异常...
具体例子:
try:
print(1/0)
except ZeroDivisionError as e:
print(e) # division by zero
捕获所有异常
格式如下:
try:
代码...
except:
捕获异常
或者
try:
代码...
except Exception as e:
捕获了异常
具体例子:
try:
print(1/0)
except:
print("发生异常了")
try:
print(1/0)
except Exception as e:
print('发生异常了!')
else
如果没有捕获到异常,那么就执行else中的事情
具体例子:
try:
print('hello')
except:
print('有异常'!)
else:
print('没有异常哦')
注意:else一定要有except否则语法错误
try…finally…
try…finally…语句用来表达这样的情况:
在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等。
说明:不管try语句有没有执行成功,都会执行finally语句
具体例子如下:
try:
print(1/0)
lst=[]
print(lst[2])
except:
print('有异常')
finally:
print('不管有没有异常都要执行我')
使用raise抛出系统的异常
在下面的例子中,如果不抛出异常,输入的字符长度小于2时,那么程序运行到print(name,pwd)时,会发生错误,因为pwd没有定义。
但是如果抛出异常,则后续的代码会不予以执行,不会报错(当然,不用异常的话也可以直接把print(name,pwd)划入else的范围,也不会报错)
while 1:
name=input("请输入你的名字(长度大于2位):")
try:
if len(name) < 2 :
raise Exception('长度不够,请重新输入!')
else:
pwsd=input('请输入密码:')
print(name,pwd)
except Exception as e:
print(e)