
异常可以理解为当程序出现了错误而在正常控制流以外采取的保护机制。这个行为又分为两个阶段:首先是由程序错误引起异常发生, 然后是检测(和采取可能的措施)阶段。
(1)NameError:尝试访问一个未初始化的变量。
(2)ZeroDivisionError:除数为零。
(3)SyntaxError:Python 解释器语法错误。
(4)IndexError:请求的索引超出序列范围。
(5)KeyError:请求一个不存在的字典关键字。
(6)IOError: 输入/输出错误。
(7)AttributeError:尝试访问未知的对象属性。
try-except 语句(以及其更复杂的形式)定义了进行异常监控的一段代码, 并且提供了处理异常的机制。最常见的 try-except是由 try 块和 except 块(try_suite 和except_suite )组成的,其中可以包含一个可选的错误原因。
在程序运行时,解释器尝试执行 try 块里的所有代码,如果代码块完成后没有异常发生,则执行流会忽略 except 语句继续执行。
异常原因是可选的, 但Python的内建异常提供至少一个参数,即描述异常原因的字符串。异常的参数可以被处理器忽略,但 Python 仍提供了保存这个异常参数的接口。要想访问提供的异常原因,必须保留一个变量来保存这个参数。把这个参数放在except 语句后,接在要处理的异常后面。
在try-except 语句段中,其功能和我们所见的else语句没有太多的不同:当 try 语句块中没有异常触发时,则执行 else 子句。在else 子句中的任何代码运行前,try 范围中的所有代码必须完全运行成功(在try语句块中没有任何异常触发)。
类似于try-except-finally, with语句也在很大程度上帮助我们简化了代码, 这与使用try-except和try-finally的效果一致。try-except和 try-finally在某种程度上保证了共享资源的唯一分配,并在任务结束的时候释放它,如文件(数据、日志、数据库等)、线程资源、简单同步、数据库连接等。with语句的目标就是应用在这种场景。
(1)上下文表达式(context_expr),又称上下文管理器。当执行with语句时,将执行上下文符号(with和as之间的内容)以获得一个上下文管理器。
(2)上下文对象,with语句块。
raise语句的第一个参数SomeExcpetion是触发异常的名字。如果raise语句有第一个参数,它必须是一个字符串、类或实例。如果有其他参数(args 或traceback),就必须提供SomeExcpetion。第二个符号为可选的 args(如参数,值),用于传给异常。这可以是单个对象或对象的元组。当异常触发时,异常的参数始终作为元组传递。如果args最初是一个元组,则将其传递给异常进行处理;否则,将先生成一个元组,再将其传递给异常(如果args是一个单独的对象,则生成仅包含一个元素的元组)。