异常和异常处理
- 异常就是错误
- 异常会导致程序崩溃并且停止运行
- 能监控并捕获到异常,将异常部位的程序进行修炼,使的程序正常运行
1. 异常
1.1. 语法
try :
<代码块> # 被try关键字检测并保护的业务代码
except <异常的类型>:
<代码块> # 代码块1出现错误后执行的代码块
比如正常情况下使用运行
print(1/0) # 会进行报错
使用try...except
来进捕获异常
#coding:utf-8
def test():
try:
1/0
except:
print('o不能被1整除')
# o不能被1整除
1.2 捕获通用异常
- 在我们无法确定是那个异常的情况下使用的方法
try:
<代码块>
except Exception as e # EXception通用异常
<异常代码块>
1.3 捕获具体异常
- 在我们能够确定是那个异常的情况下使用的方法
except <具体的异常类型> as e
def Test ():
try:
1/0
except ZeroDivisionError as e: # ZeroDivisionError:是python内置的具体异常:0不能被整除
print(e)
Test()
# division by zero
1.4 捕获多个异常
当except代码后边的异常类型使用元组包裹起来,捕获到哪种抛哪种
def test1():
try:
print('hello')
print(name)
except (ZeroDivisionError, NameError) as e:
print(e)
print(type(e))
print(dir(e))
test1()
1.5 异常中的finally
- 功能
- 无论是否发送异常,一定会执行的代码块
- 在函数中,即便在
try
或except
中进行了return
也依然会执行finall语法块 try
语法至少要伴随except
或finally
中的一个
try:
<代码块>
except:
<代码块>
finally:
<代码块>
finally中的代码块一定是执行的
2.自定义异常与抛出异常
自定义抛出异常函数-raise
将信息以报错的形式抛出(帮助我们主动抛出异常)
让我们来看一个例子
def test(number):
if number ==100:
raise ValueError("number 不可以是100")
return number
if __name__ =="__main__":
result = test(50)
print(result) # 正常执行
result1 = test(100) # 报错
print(result1)
那我们的try...excep
能捕获到raise
吗?
def test(number):
if number ==100:
raise ValueError("number 不可以是100")
return number
def test1(number):
try:
return test(number)
except ValueError as e :
return e
if __name__ =="__main__":
result = test1(50)
result1 = test1(100)
print(result)
print(result1)
# 50
# number不可以是100
从上述例子中,我们可以得知try..except
是可以捕获到raise
抛出的错误
3. 自定义异常类型
#coding:utf-8
# 定义两个自定义异常类型
# 数字显示错误类
class NumberLimitError(Exception):
def __init__(self,message):
self.message = message
# 字符串限制错误类
class StringLimitError(Exception):
def __init__(self,message):
self.message = message
def test3(name):
if name == "dewei":
raise StringLimitError('dewei不可以被填写')
return name
def test4(number):
if number > 100:
raise NumberLimitError("数字不可以大于100")
return number
if __name__ =="__main__":
try:
print(test3('dewei'))
except StringLimitError as e:
print(e)
try:
print(test4(101))
except NumberLimitError as e:
print(e)
'''
dewei不可以被填写
数字不可以大于100
'''
4. 断言—assert
用于判断一个表达式,在表达式条件为false的时候触发异常
基本功能和raise
非常相似,但是比raise
比较简单
用法
assert expression
# 参数:
expression:表达式,一般是判断相等,或者判断是某种数据类型的bool判断的语句