1.异常
1.异常
1.1异常的概念
相较于正常而言不正常的现象叫做异常,在程序开发过程中遇到错误或BUG都是补充正常情况。异常并不等价于错误,异常是软件在运行的过程中因为一些原因如:使用者使用不当引起的程序错误,导致软件奔溃的现象叫异常。
1.2异常的继承关系
BaseException()
所有异常的父类
Exception()
(
BaseException()
的子类)是常见异常的父类
1.3异常发生的后果
导致程序的奔溃
1.4处理异常方式
try - except
语句块
-------
异常捕获
语法格式:
try:
#
有可能发生异常的代码
except:
#
处理异常
try:
num = int(input("请输入一个数字:"))
print("hhhh")
result = num + 10
except:
print("发生了异常")
print("开始处理异常")
num = int(input("必须输入的是数字:"))
result = num + 10
print("{} + 10 = {}".format(num,result))
print("结束了")
>>>
请输入一个数字:123
hhhh
123 + 10 = 133
结束了
>>>
请输入一个数字:derf
发生了异常
开始处理异常
必须输入的是数字:3
3 + 10 = 13
结束了
#如果想把异常情况打印出来,可以写 except Exception as e
try:
num = int(input("请输入一个数字:"))
print("hhhh")
result = num + 10
except Exception as e:
print("发生了异常",e)
print("开始处理异常")
num = int(input("必须输入的是数字:"))
result = num + 10
print("{} + 10 = {}".format(num,result))
print("结束了")
>>>
请输入一个数字:hhh
发生了异常 invalid literal for int() with base 10: 'hhh'
开始处理异常
必须输入的是数字:12
12 + 10 = 22
结束了
2.自定义异常
2.1finally关键字
表示必须(必要)执行的代码(释放资源、IO等)
注意:在函数中,如果
return
后存在
finally
关键字,那么代码并不会直接返回(执行
return
),而
是需要执行
finally
代码块,再执行返回(
return
)
,
所以说
finally
会在
return
之前执行
def demo(msg):
try:
int(input(msg))
print("hello word")
return "A"
except Exception as e:
print("处理了异常")
return "B"
finally:
print("释放资源")
res = demo("请输入一个数字:")
print(res)
>>>
请输入一个数字:12
hello word
释放资源
A
>>>
请输入一个数字:cf
处理了异常
释放资源
B
2.2自定义异常
首先创建一个类,之后继承
Exception
或者
BaseException
,建议使用
Exception
#自定义了zdy类,zdy类继承Exception类
class zdy(Exception):
def __init__(self,msg):
Exception.__init__(self,msg)
def login(username):
if username == None:
raise zdy("用户名不能为空")
try:
login(None)
except Exception as e:
print("捕捉到的异常,信息是------>",e)
>>>
捕捉到的异常,信息是------> 用户名不能为空