异常基本用法
if __name__ == '__main__':
'''
1.异常捕获处理
try:
代码逻辑......
except 异常类型 as e:
异常处理逻辑......
finally:
最终执行逻辑......
try 需要配合 except 或 finally使用,不能单独使用
使用try + except 异常类型 as e 捕获异常
finally 中的逻辑是一定会执行的
2. 就算在try 或 except return,finally 也一定会执行
3. 如果finally中return,那么不管try,except中是否return,最后返回的值都是finally中return的值
'''
def divide_zero():
1/0
def divide_zero_base():
try:
1/0
except Exception as e:
print(e)
def divide_zero_pro():
try:
1/0
except Exception as e:
print(e)
finally:
print('finally')
divide_zero_base()
divide_zero_pro()
def test_finally():
try:
return 'test_finally.try'
finally:
print('test_finally.finally')
print(test_finally())
def test_finally1():
try:
1/0
except ZeroDivisionError as e:
return 'test_finally1.except'
finally:
print('test_finally1.finally')
print(test_finally1())
def test_finally_return():
try:
return 'try return'
finally:
return 'finally return'
def test_finally_return1():
try:
1/0
except ZeroDivisionError as e:
return 'except return'
finally:
return 'finally return'
print(test_finally_return())
print(test_finally_return1())
常见异常类型
异常类型 | 说明 |
---|
Exception | 通用异常 |
ZeroDivisionError | 除0异常 |
SyntaxError | 语法错误 |
NameError | 变量名,类名,函数名未定义 |
TypeError | 缺少必填参数 |
AttributeError | 没有类,对象的属性 |
ValueError | 参数值错误 |
IndexError | 列表索引越界 |
KeyError | 访问dict不存在的key |
自定义异常&主动抛出异常
if __name__ == '__main__':
'''
1.自定义异常: class 自定义异常名(Exception):
def __init__(self,message)
self.message = message
2.使用raise主动抛出异常: raise 异常对象
'''
class LimitError(Exception):
def __init__(self, message):
self.message = message
def create_limit_error():
raise LimitError('自定义超限制异常')
def test_error():
try:
create_limit_error()
except LimitError as e:
print(e)
test_error()
断言
if __name__ == '__main__':
'''
assert 表达式,message(表达式为False时,会抛出异常 raise AssertionError(message))
'''
assert 1 == 1
try:
assert 1 == 2, '1不等于2'
except AssertionError as e:
print(e)