2019-06-01 异常处理

#异常发生后 程序就结束了
#若输入一个字母 则抛出一个异常
#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

你可能感兴趣的:(2019-06-01 异常处理)