异常
- 广义上的错误分为错误和异常
- 错误指的是可以认为避免
- 异常是指在语法逻辑正确的前提下,出现的问题
- 在python里,异常是一个雷,可以处理和使用
异常处理
- 不能保证程序永远正确运行
- 但是,必须保证程序在最坏的情况下得到的问题被妥善的处理
- python的异常处理模块全部语法为:
- try:
- except 异常类型1
- except 异常类型2
- except (异常类型1,异常类型2)
- except:
- else:
- finally:
try:
num = int(input("plz input your number:"))
rst = 100/num
print('你输入的事:{}'.format(rst))
# 如果是多种error的情况
# 需要把越具体的错误,越往前放
# 在异常类继承关系中,越是子类的异常,越是往前方
# 越是父类的异常,越要往后放
# 在出力异常的时候,一旦拦截到某一个异常,则不再继续往下查看,直接进行下一个
#代码,即在finally执行finally语句块,否则就执行下一个大的语句
except ZeroDivisionError as e:
print("不要输0")
print(e)
exit()
except NameError as n:
print("命名错误")
print(n)
exit()
# 所有异常都继承自Exception
# 如果写上这句,任何异常都能拦截
# 而且,下面这句话一定是最后一个exception
except exception as e:
print("不知道哪错了")
print(e)
exit()
用户手动引发异常
- 当某些情况,用户希望自己引发一个异常的时候,可以使用
- raise关键字来引发异常
#coding=gbk
# raise案例
try :
print("我爱老婆")
raise ValueError
print("还没完")
except NameError as e:
print("NameError")
except ValueError as e:
print("ValueError")
except Exception as e:
print('有异常')
finally:
print("我肯定会被执行")
# 自己定义异常
# 自定义异常必须是系统异常的子类
'''
class jjcError(ValueError):
pass
try :
print("我爱老婆")
raise jjcError
print("还没完")
except NameError as e:
print("NameError")
except ValueError as e:
print("ValueError")
except Exception as e:
print('有异常')
finally:
print("我肯定会被执行")
# else案例
try:
num = int(input("plz input your number:"))
rst = 100/num
print('你输入的事:{}'.format(rst))
except Exception as e:
print("Exception")
else:
print("No Exception")
finally:
print("我肯定会被执行")