Python异常的恐怖传说

对于初入门无助的初学者来说,最怕的不是恐怖片。




python监控异常退出 python异常退出程序_python监控异常退出


而是最怕Python程序抛出一串恐怖的字符串,然后整体程序就终止了。


python监控异常退出 python异常退出程序_python 退出程序_02


然后就很无解了,怎么才能解决这个问题。异常这个鬼,不仅让初学者恐怖,经常使用的中鸟,老鸟也是很痛苦。

一个快运行出结果的程序,由于异常而中途退出,这个心情又有多滴血?


python监控异常退出 python异常退出程序_python退出程序_03


引出这里要介绍的预防Python“出轨”的办法。请看下面。

Python异常语法

是不是经常在Python运行时,出现错误导致异常退出而烦恼?

是不是不知道错误出现在哪里而烦恼?

解决办法来了,让Python的异常语法来帮忙。


python监控异常退出 python异常退出程序_Python_04


Python版本不同的异常机制

Python2和Python3的Exception差异:

  在Python 2.x用法实例:

1    try:2         ......3    except Exception,e:4        raise e

  在Python 3.x的用法实例:

1      try:2          ......3      except Exception as e:4           raise e

可以看到,Python 3中是as e.

异常语法概要

尝试捕获异常(接收异常通知),将程序转为正常状态并继续执行。


python监控异常退出 python异常退出程序_python监控异常退出_05


语法说明:


python监控异常退出 python异常退出程序_错误类型_06


as 子句是用于绑定错误对象的变量,可以省略

except 子句可以有一个或多个,但至少要有一个

else 子句最多只能有一个,也可以省略

finally 子句最多只能有一个,也可以省略

实际场景中的异常模式


python监控异常退出 python异常退出程序_Python_07


异常的常见模式:

#-------------模块一:except 错误类型,捕获异常类型---------------------------# except ValueError:  # 只有在有异常时才会执行#     print('在try的内部语句中发生了值错误,已处理并转为正常状态')# except ZeroDivisionError:#     print('输入人数为0,分苹果失败')#-------------------------------------------------------------------------#---模块二:except(错误类型1,错误类型2):满足这两个错误类型都执行这个函数------# except (ValueError, ZeroDivisionError):#     print('苹果不分了')#--------------------------------------------------------------------------#--模块三:except:除了捕获的之外,不管什么异常都执行此函数----------------------# except ValueError:  # 只有在有异常时才会执行#     print('在try的内部语句中发生了值错误,已处理并转为正常状态')# except:#     print('收到除ValueError之外的错误通知')#---------------------------------------------------------------------------#--模块四:as 变量: 将捕获的错误信息用变量绑定----------------------------------# as 的用法# except ValueError as err:#     print('错误的值是:', err)  # invalid literal for int() with base 10: 'aaa'    # 10个苹果您想分给几个人?    # 请输入人数: aaa    # 错误的值是: invalid literal for int() with base 10: 'aaa'    # 程序正常退出#---------------------------------------------------------------------------#--模块五:else的用法,只有在try是没有异常的时候才会执行--------------------------# except ValueError:#     print('苹果不分了')# else:  # 只有在try没有发生错误时才会执行#     print('在当前try语句内部,没有发生任何异常,程序正常执行')#----------------------------------------------------------------------------#--模块六:finally的用法,不管try有没有错误,其下的语句块都会执行------------------# finally字句的用法except ValueError:    print('苹果不分了')except:  # 除ValueError异常外的异常    print('错误值是:0' )else:  # 如果没有异常才执行    print('else子句被执行了')finally:  # 不管有没有异常都会执行的语句    print('finally子句被执行了')print('程序正常退出')