异常的处理try
1. 形式
什么是异常:程序执行过程中的不可预知的问题
常见的异常
NameError
TypeError
ValueError
AttribitueError
SyntaxError
IndexError
1.1 异常处理处理
通过try进行异常的捕捉,形势如下
try:
可能出现异常的代码
except Exception as e:
给捕捉到的异常起别名,进行打印
print(e)
出现异常的时候解决的代码
else:
没有异常就执行的代码
finally:
不管有没有异常都执行的代码
捕捉多个异常,但是在同一个时间段里边只能捕捉到一个异常
try:
可能出现异常的代码
except (Exception,...) as e:
给捕捉到的异常起别名,进行打印
print(e)
出现异常的时候解决的代码
else:
没有异常就执行的代码
finally:
不管有没有异常都执行的代码
案例:
s = 'Hello'
try:
print(s.index('O'))
except Exception:
print('查找的子串不存在')
当代码出现了很层级的调用时,在其中发生了异常,如果没有处理这个异常,这个异常会自动向上抛出
如果上层也没有处理,那么再继续向上抛出,直到抛到解释器,解释器默认处理异常的方式就是中断程序,将异常信息显示控制台上
案例:
def func_a():
print('a run ...')
func_b()
def func_b():
print('b run ...')
func_c()
def func_c():
print('c run ...')
try:
print(1/0)
except Exception:
print('你的除数为0')
func_a()
# 多个异常的捕捉,但是在同一时刻只能有一个异常发生
1.2 自定义异常类
异常类继承与Exception类的
抛异常的时候使用raise
class PhoneNumberNoDigitError(Exception):
pass
class PhoneNumberLenthError(Exception):
def __init__(self, msg):
self.__msg = msg
def __str__(self):
return self.__msg
def get_number():
num = input('输入number:')
if num.isdigit() is False:
raise PhoneNumberNoDigitError()
elif len(num) != 11:
raise PhoneNumberLenthError('手机位数不够11')
return '输入合法:'+num
from p_03自定义异常类 import *
try:
num = get_number()
except (PhoneNumberLenthError, PhoneNumberNoDigitError)as e:
print(e)
else:
print(num)