异常处理格式:
try:
执行语句1
raise 自定义异常类型()
except 自定义异常类型:
执行语句2
except (异常类型1,异常类型2,……): #多个异常类型分别用逗号隔开
执行语句3
except Exception: #万能匹配,不返回错误类型!
执行语句4
else:
执行语句5
finally:
执行语句6
简要说明:
1.raise 语句可以自定义报错信息,如上。
2. raise后的语句是不会被执行了,因为已经抛出异常,控制流将会跳到异常捕捉模块。
3. except 语句可以一个except后带多个异常,也可以用多个语句捕捉多个异常,分别做不同处理,如果不清楚具体异常类型,最后可用Exception做万能匹配。
4. except语句捕捉的异常如果没有发生,那么except里的语句块是不被执行的。而是执行else里的语句
5. 在上面语句中try/except/else/finally所出现的顺序必须是try–>except X–>except–>else–>finally,即所有的except必须在else和finally之前,else(如果有的话)必须在finally之前,而except X必须在except之前。否则会出现语法错误。
6.else和finally都是可选的.
7.在上面的完整语句中,else语句的存在必须以except X或者except语句为前提,如果在没有except语句的try block中使用else语句会引发语法错误。
代码例子:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
class MyError(Exception): #自定义一个异常类MyError,继承父类Exception(异常万能类)
def __init__(self,message):
self.message = message
self.code = 100
def __str__(self):
return self.message
try:
def get_num():
num = int(input("输入一个偶数>>>:").strip())
if num % 2 != 0:
raise MyError("错误信息:你输入的不是一个偶数") # raise语句会自动触发异常
get_num()
except MyError as e: # 匹配自定义异常
print(e) #提示错误信息
print("错误代码:%d"%e.code) #提示错误代码
except ValueError: # 匹配自带异常
print("你输入的不是一个整数")
except Exception:
print("未知错误!")
else:
print(">>>:输入正确")
finally:
print("------不管输入是否有误,都执行------")