# 捕获异常
NameError, 表示没有定义
dict1 = {1:1}
print(dict1[2]) # KeyError表示字典没有key为2的元素
ModuleNotFoundError,表示找不到这个模块
a = 100/0
print(a) #ZeroDivisionError
异常对象的类都继承标准库里面的Exception类
while True:
try:
miles = input(‘请输入英里数:’)
km = int(miles)* 1.609344
print(f’等于{km}公里’)
except ValueError:
print(‘你输入为非数字字符’)
try:
choice = input(‘请输入你的选择:’)
if choice == ‘1’:
100/0
elif choice == ‘2’:
[][2]
except ZeroDivisionError:
print(‘出现ZeroDivisionError’)
except IndexError:
print(‘出现IndexError’)
# 可以匹配所有类型的异常,这样子任何类型的异常发生都不会终止程序
try:
100/0
except Exception as e: #所有的异常都是Exception的子类,所以Exception能匹配所有类型的异常
print(‘未知异常:’, e)
“”"except为空,也可以匹配所有类型的异常,而且可以通过traceback库
库,显示异常的信息和异常产生处的函数调用栈的信息,如下"""
import traceback
try:
100/0
except Exception as e:
print(‘未知异常:’, e)
print(traceback.format_exc()) #打印出代码哪行出现了异常
“”“自定义异常,异常类型都是继承自Exception的类,表示各种类型的错误
我们也可以自己定义异常,比如我们写一个用户注册的函数,要求用户输入的电话号码
只能是中国的电话号码,并且电话号码中不能有非数字字符”""
异常对象,代表电话号码有错误的字符
class InvalidCharError(Exception):
pass
异常对象,代表电话号码非中国号码
class NotChinaTelError(Exception):
pass
定义了上面的异常,当用户输入电话号码时,出现相应错误的时候
我们可以使用raise关键字来抛出对应的自定义异常
# 如果用户输入手机号码为错误,如果继续输入1,如果结束输入0,如果输入的既不是1又不是0其他内容只能有3此输入机会,如果3此机会都是非1或0的
其它字符,整个程序输入
isFlag = 1
while isFlag:
def register():
tel = input(‘请输入注册您的电话号码:’)
# 如果有非数字字符
if not tel.isdigit():
raise InvalidCharError
# 如果不是以86开头,则不是中国号码
if not tel.startswith('86'):
raise NotChinaTelError
return tel
try:
ret = register()
except InvalidCharError:
print('电话号码中有错误的字符')
except NotChinaTelError:
print('非中国手机号码')
count = 0
while count <= 3:
try:
isFlag = int(input('如果继续请输入1否则输入0:'))
if isFlag == 0:
break
elif isFlag == 1:
count = 4
except Exception as e:
print('输入的为非法数字')
count += 1
if count == 3:
print('您输入的非1或0的其他字符内容超过了3次,自动结束输入程序')
break
if isFlag == 0 or count == 3:
break