python异常处理
程序员文章站
2024-03-18 12:29:58
...
python异常处理
python有两种错误,分别是语法错误和异常。语法错误又叫解析错误,通常指python解析源代码的时候出现的错误。异常就是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。异常是python对象。通常我们需要捕获,否则程序会终止执行。所有的异常的基类就是baseException
一、捕获异常可以使用try/except/else/finally语句,正常的流程工作方式为:
- 首先执行try字句
- 如果过程中没有异常发生则忽略except子句,执行else子句或是退出异常语句块。
- 如果在执行的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
- 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
- 一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
- 无论发什么情况,finally子句都会被执行。如果其他语句块中有return语句,现将返回语句挂起,执行完finally之后再执行返回语句
#encoding=UTF-8
'''
@author:xianyt
@vertion:python3
@func:定义一个列表,从列表使用下标的方式获取数据,处理其中可能出现的异常(indexError)
'''
if __name__ =='__main__':
test = [1,2,3]
try: #捕获异常
i = int(input("请输入下标"))
test[i]
except ValueError as err: #异常分支,捕获输入异常
print("请输入数值下标")
print(err)
except IndexError as i: #捕获下标越界
print("下标越界,请输入正确的下标范围")
#print(i)
else: #如果没有出现异常,则正常输出
print(test[i])
finally:
print("退出程序")
二、语句的搭配情况
1、try\finally
2、try\except
3、try\except\else
4、try\except\else\finally
三、使用raise语句抛出异常。首先必须是一个异常的实例或者是异常的类(也就是指exception的子类).
语法:raise [Exception [, args [, traceback]]]
#Encoding = Utf-8
'''
@author:xianyt
@vertion:python3
@func:使用raise抛出异常
'''
if __name__ == '__main__':
try:
raise KeyboardInterrupt #抛出KeyboardInterrupt异常
finally:
print("goodbye,world!")
四、用户自定义异常
可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类
#Encoding = Utf-8
'''
@author:xianyt
@vertion:python3
@func:自定义输入性别和年龄异常
思路:
1、定义一个异常类,继承异常
2、创建异常对象,抛出
3、处理自定义异常
'''
class sexError(Exception): #定义异常类,继承exception
def __init__(self, code, msg):
self.code = code;
self.msg = msg;
def __str__(self):
return self.code+':'+self.msg
class ageError(Exception):
def __init__(self, code, msg):
self.code = code;
self.msg = msg;
def __str__(self):
return self.code+':'+self.msg
def inputSex():
sex = input('请输入性别:')
if sex == 'mele' or sex == 'famele':
return sex
else:
raise sexError('001', '性别输入不合理(%s)'%(sex)) #抛出异常
def inputAge():
age = input('请输入年龄:')
if age.isdigit():
age = int(age)
if age>0 and age<140:
return age
else:
raise ageError('003', '年龄输入不合理(%s)'%(age))
else:
raise ageError('002', '年龄必须是数值')
if __name__ == '__main__':
try:
inputSex();
except sexError as e:
print(e)
else:
print('性别输入成功')
try:
inputAge();
except ageError as e:
print(e)
else:
print('年龄输入成功')
五、异常体系
上一篇: LRU缓存机制的原理与实现
下一篇: 二十二:寻找组合