主动抛出异常
语法:raise 异常种类(异常信息)
age = input("请输入你的年龄:") if not age.isdigit(): raise TypeError("年龄是整形")#这样就提前预知错的发生 print("十年后,你%s"%(int(age)+10))#若不规范输入就会抛出异常
用raise 抛出的异常也可使用try except接受
try: age = input("请输入你的年龄:") if not age.isdigit(): raise TypeError("年龄是整形") # 这样就提前预知错的发生 print("十年后,你%s" % (int(age) + 10)) # 若不规范输入就会抛出异常 except Exception: print("出错了")
断言:
可以理解为理解断定,就是很清楚 很明确的
什么时候使用断言
下面的代码必须依赖上面代码的正确性
语法
assert 结果为BOOL的表达式
如果值为True则继续往下执行
为False抛出一个AssertionError 表示断言失败
没有assert也可以使用if来实现效果,但是assert节省代码。
li = [] li.append("aa") li.append("aa") assert len(li)>3 print(next(li)) print(next(li)) print(next(li)) #
自定义异常类型
当系统提供的异常类型,中并没有你想要的错误匹配,这时候就需要自定义异常类型的
语法:
class 自定义异常的类名(BaseException):
总结的来说:之所以自定义异常类型,是为了更具体描述你的错误,让使用者一眼就看出来
定义:
class UnLikeErroe(BaseException): def __init__(self, msg): self.msg = msg
使用跟其他异常相同:
def haha(): yuyan = input("请输入你想说的话:") if yuyan == "chinese": print("正好听") else: raise UnLikeErroe("再说一遍")
再try exception 异常类名 使用 as可以接受异常对象
try: haha() except UnLikeErroe as unlike: # unlike 就是异常对象起别名 print(unlike)
异常处理的使用场景
不应该滥用try except
什么时候用?
如果你知道为什么出错,应该把代码修改正确,而不是加上try except。只有当你不清楚为什么异常的时候!这时候才使用try except