(1)捕获异常 try....except....
把你觉得可能会出现异常的代码放到try
里面,当try里面的代码执行出现异常后执行except里面的代码
except:表示不管出现什么异常,都执行except里面的代码
except 异常类型:出现了某种类型的异常时才执行里面的代码。
一个try可以跟多个except
try:
可能会出现异常的代码
except 异常1:
处理方式1
except 异常2:
处理方式2
....
NameError 、IOError就是异常
举个栗子1:
当你在try中的代码一旦出现异常,立即会跳到except部分,并且只执行一次出现异常所对应的except的代码
举个栗子2:
將except:
放在最上面
執行結果會報錯,except:
必須放在最後
(2)捕获多个异常
- Python2 做法:将多个异常用逗号“,“隔开
try:
...
except 异常1,异常2,异常3....:
try部分代码执行只匹配第一个异常,所以相对应的异常要写到前面,如果写到后面相当于没有匹配上,还是会报错:
- Python3捕获多个异常:
将异常写在元组里面,并且用逗号“,“隔开。
而且这种写法对异常的顺寻没有要求,python2也可以使用这种写法。
3、异常传递
def test1():
print("-------1.1-------")
print(num)
print("--------1.2-------")
def test2():
print("-------2.1-------")
test1()
print("-------2.2-------")
def test3():
try:
print("------3.1----")
test1()
print("------3.2----")
except Exception as result:
print("bu huo dao l yichang")
test3()
[root@mail python]# python chuandiyichang.py
------3.1----
-------1.1-------
bu huo dao l yichang
在此代码中,执行test3是里面调用了test1,执行test1时遇到了异常,所以这里做了捕获异常处理,处理完整后直接退出整个程序,相当于return(一、返回结果 二、结束程序)
4、抛出自定义的异常
class Test(Exception):
def __init__(self,length,atleast):
self.length = length
self.atleast = atleast
#input("输入一个字符串:")
try:
raise Test(1,2)
except Test as haha:
print(haha.length)
print("haha")
自定义异常的父类必须是Exception,将类所产生的对象保存在haha中。
【注意】Exception可以捕获到所有异常类型
5、异常处理中的抛出异常
class Test(object):
def __init__(self,switch):
self.switch = switch
def calc(self,a,b):
try:
return a/b
except Exception as result:
if self.switch:
print("捕获开启,已经捕获到异常,信息如下:")
print(result)
else:
raise
a = Test(True)
a.calc(1,0)
print("----------------------------------------------------------")
a.switch = False
a.calc(1,0)
在此代码中,else 部分直接写了一个raise,表示捕获到异常后啥都不干,直接将其扔出去。