python的异常处理机制

本菜鸟在用flask后台开发的时候经常会遇到异常管理机制的问题,例如登陆密码不匹配,没有输入等等。借此来学习一下python的异常管理机制。

 Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。

1、try...except

try...except...finally这是我用得比较多的语句,python先执行try下的语句如果遇到错误就执行except下的语句,最后假如有finally语句的话,无论正确与否都得执行。说明:每个try语句都必须有至少一个except语句。如果有一个异常程序没有处理,那么Python将调用默认的处理器处理,并终止程序且给出提示。在except中还可以捕捉特定的错误,利用excepy...as语句即可。在这里值得注意的是在python2.x版本中捕捉错误是 except IOError ,e ,,而3.x版本则是except as e。except具体用法如下:

except: #捕获所有异常

except: <异常名>: #捕获指定异常

except:<异常名1,异常名2):捕获异常1或者异常2

except:<异常名>,<数据>:捕获指定异常及其附加的数据

except:<异常名1,异常名2>:<数据>:捕获异常名1或者异常名2,及附加的数据库

异常名      描述
AttributeError 调用不存在的方法引发的异常
EOFError         遇到文件末尾引发的异常
ImportError 导入模块出错引发的异常
IndexError         列表越界引发的异常
IOError         I/O操作引发的异常,如打开文件出错等
KeyError     使用字典中不存在的关键字引发的异常
NameError 使用不存在的变量名引发的异常
TabError 语句块缩进不正确引发的异常
ValueError 搜索列表中不存在的值引发的异常
ZeroDivisionError     除数为零引发的异常
下面po代码捕捉搜索列表中不存在的值引发的异常
    try:
        p = int(page_str)
    except ValueError as e:
        pass
2、raise
很多时候我们并不是要python执行错误而引发的错误,而是我们通过自身判断得出这个是错误的,所以我们需要用raise来故意引发错误。

形式如下:

raise  #manually trigger an exception  #raise 异常名

raise, #pass extra data to catcher too  #异常名,附加数据

raise  #re-raise the most recent excepti #类名

 if not email:
        raise APIValueError('email', 'Invalid email.')


3、assert

assert 简化了raise语句:
需要注意的是,assert语句一般用于开发时对程序条件的验证,只有当内置_debug_为True时,assert语句才有效。当Python脚本以-O选项编译成为字节码文件时,assert 语句将被移除。
但与raise语句不同的是,assert语句是在条件测试为假时,才引发异常。assert语言的一般形式如下:

assert <条件测试>,<异常附加数据> #其中异常附加数据是可选的

测试程序:
>>> mylist = ['item']
>>> assert len(mylist) >= 1
>>> mylist.pop()
'item'
>>> assert len(mylist) >= 1
Traceback (most recent call last):
  File "", line 1, in
AssertionError
>>>



你可能感兴趣的:(python的异常处理机制)