#异常发生后 程序就结束了
#若输入一个字母 则抛出一个异常
#opt =int( input('输入整数'))
#print(opt)
#except Type:处理指定类型的异常
#except (Type1,Type2,Type3):同时处理这三种异常
#若想获得异常数据,仍可使用as语句
opt =None
try:
opt = int(input('输入整数'))
except (ValueError,KeyError):#所有的错误都会以此为出口 处理所有异常
print('你输入的不是一个数')
'''
只是值错误的出口
except ValueError as e:
print(e)
'''
print(opt)
"""
try :
pass
except 异常类型1:
pass
except 异常类型2:
pass
except (yichang1,2,3):
pass
"""
定义这种方式捕捉异常时,一定要先写具体的异常,再写普遍性的异常
所有的异常,继承自Exception
#try :
#except:
#发生异常时执行
#else:
#未发生异常时执行
#finally;
# 有无异常均会执行
#可以只有try。。finally 语句
#finally 一般用于释放资源
#异常的传递
#异常发生后会传递给方法(函数)的调用者A 若A有捕捉到该异常 则按捕捉机制处理
#否则会层层上传 传递到程序的起始方法(函数)
#最终会传递到python解析器 报错 此时就简单的终止程序
"""
def func1():
a=0
print(4/a)
def func2():
try:
func1()
except:
print('除数不为0')
func2()
#手动抛出异常raise
def func3():
print('hhh')
raise ZeroDivisionError()
func3()
"""
自定义异常
class ParamInvalidException(Exception):
def __init__(self,code,msg):
self.code=code
self.msg=msg
def login(username,pwd):
if len(username)<6:
raise ParamInvalidException(100,'用户名长度小于6')
if username !='zs':
raise ParamInvalidException(101,'用户名错误')
print('登录成功')
try:
login('zs',78)
print('ddd')
except ParamInvalidException as e:
print (e.code,e.msg)
raise e
程序发生异常的处理:
是否是可控的 ?无论是否可控,先记录一下 若不可控 则忽略不管
若可控
try :
pass
except Exception:
#先记录异常
#能处理则处理 若不能处理 raise
pass