赞
踩
广义上的错误分为错误和异常
错误指的是可以人为避免
异常是指在语法逻辑正确的前提下,出现的问题
在python里,异常是一个类,可以处理和使用**
不能保证程序永远正确运行,但是,必须保证程序在最坏的情况下得到的问题被妥善处理
python的异常处理模块全部语法为:
try: #尝试实现某个操作, #如果没出现异常,任务就可以完成 #如果出现异常,将异常从当前代码块扔出去尝试解决异常 except 异常类型1: 解决方案1:用于尝试在此处处理异常解决问题 except 异常类型2: 解决方案2:用于尝试在此处处理异常解决问题 except (异常类型1,异常类型2...) 解决方案:针对多个异常使用相同的处理方式 excpet: 解决方案:所有异常的解决方案 else: 如果没有出现任何异常,将会执行此处代码 finally: 管你有没有异常都要执行的代码
执行try下面的语句
案例1:简单异常案例
try:
num = int (input("请输入number:"))
result = 100/num;
print("The result is:{0}".format(result))
except SyntaxError:
print("这是语法有错误!!!")
except:
print("我知道有错误,但是不用指出错误类型")
exit()
finally:
print("我 fo 了")
输出:
请输入number:0
我知道有错误,但是不用指出错误类型
我 fo 了
案例2:简单异常案例
给出异常信息
try:
num = int(input("请输入number:"))
rst = 100/num
print("计算结果是: {0}".format(rst))
# 捕获异常后,把异常实例化,出息信息会在实例里
# 注意以下写法
# 以下语句是捕获ZeroDivisionError异常并实例化实例e
except ZeroDivisionError as e:
print("我知道有错误,但是不用指出错误类型")
print(e)
print(type(e))
exit()
finally:
print("我 fo 了")
输出:
请输入number:0
我知道有错误,那我报个错
division by zero
<class 'ZeroDivisionError'>
我 fo 了
案例3:多种异常案例
如果是多种error的情况
需要把越具体的错误,越往前放
在异常类继承关系中,越是子类的异常,越要往前放,
越是父亲类的异常,越要往后
在处理异常的时候,一旦拦截到某一个异常,则不在继续往下查看,直接进行下一个代码,即有finally则执行finally语句块,否则就执行下一个大的语句
try: num = int(input("请输入number:")) rst = 100 / num pint("计算结果是: {0}".format(rst)) except ZeroDivisionError as e: print("输入出现错误") print(e) # exit是退出程序的意思 exit() except NameError as e: print("名字起错了") print(e) except AttributeError as e: print("好像属性有问题") print(e) exit() # 所有异常都是继承自Exception # 如果写上下面这句话,任何异常都会拦截住 # 而且,下面这句话一定是最后一个exception except Exception as e: print("我也不知道就出错了") print(e) except ValueError as e: print("NO>>>>>>>>>>>>>>>>>>") print("无论怎样我都会执行")
输出0:
请输入number:0
输入出现错误
division by zero
输出1:
请输入number:1
名字起错了
name 'pint' is not defined
无论怎样我都会执行
当某些情况,用户希望自己引发一个异常的时候,可以使用 raise 关键字来引发异常
案例4:raise异常案例
try:
print("测试输出")
print(3.1415926)
# 手动引发一个异常
# 注意语法: raise ErrorClassName
raise ValueError
print("程序没有完结")
except NameError as e:
print("NameError")
except ValueError as e:
print("ValueError")
except Exception as e:
print("有异常")
finally:
print("我肯定会被执行的")
输出:
测试输出
3.1415926
ValueError
我肯定会被执行的
案例5:raise异常案例2-自定义异常
# 需要注意: 自定义异常必须是系统异常的子类 class AnqiaoValueError(ValueError): pass try: print("测试输出") print(3.1415926) # 手动引发一个异常 # 注意语法: raise ErrorClassName raise AnqiaoValueError print("程序没有完结") except NameError as e: print("NameError") except ValueError as e: print("ValueError") except Exception as e: print("有异常") finally: print("我肯定会被执行的")
输出:
测试输出
3.1415926
ValueError
我肯定会被执行的
案例6:else异常案例
# else语句案例
try:
num = int(input("请输入 Number:"))
rst = 100 / num
print("计算结果是: {0}".format(rst))
except Exception as e:
print("Exception")
else:
print("No Exception")
finally:
print("反正我会被执行")
输出0:
请输入 Number:0
Exception
反正我会被执行
输出1:
请输入 Number:1
计算结果是: 100.0
No Exception
反正我会被执行
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。