1、概念
当我们调用 Python 并发生错误或异常时,通常会停止并生成错误消息。
python
1 | print(hello) |
解析器会输出出现语法错误的那一行,指向这行里面检测到的第一个错误。 在上述示例中, print() 这个函数中检测到了错误,因为”hello”不存在,没有被创建 。文件名和行号也会被输出,以便输入来自脚本文件时你能知道去哪检查。
2、异常类型
(一)内置异常
异常类型 | 描述 |
---|---|
Exception | 几乎所有异常类的基类 |
SyntaxError | 语法错误时引发 |
TypeError | 将内置函数用于类型不正确的对象时引发 |
ValueError | 将内置函数用于类型正确但包含的值不正确的对象时引发 |
AttributeError | 引用属性失败时引发 |
NameError | 找不到名称(变量)时引发 |
IndexError | 使用序列中不存在的索引时引发 |
KeyError | 使用映射中不存在的键值时引发 |
OSError | 操作系统不能执行指定任务时引发 |
(二)自定义异常
python
1 | class MyException(Exception): |
3、异常处理
(一)try - except
我们可以使用 try - except 语句捕获和处理异常,一个没有指定异常名称的 except 语句可以捕获所有异常(但是一般不建议这样做,因为这样得不到任何有用的信息)。一个简单的例子如下
python
1 | try: |
(二)处理特定异常
在 except 语句后加上异常类的名称,表示处理特定的异常。其中,使用语句 except Exception 几乎能捕获所有的异常,因为 Exception 几乎是所有异常类的基类
python
1 | try: |
(三)处理多个异常
我们还可以使用多个 except 语句处理多个异常。此时,要特别注意它们之间的排列顺序,因为当前面的 except 语句捕获到异常后,将不再执行后面的 except 语句
python
1 | try: |
(四)异常处理中的 else 语句
使用 else 语句表示没有捕获到异常的时候进行的操作
python
1 | try: |
(五)异常处理中的 else 语句
使用 finally 语句表示无论是否捕获到异常都进行的操作
python
1 | try: |
4、异常与函数
异常与函数有着天然的关系。如果不处理函数中引发的异常,它将向上传播到调用函数的地方。如果在那里也没有得到处理,它将一直向上传递,直至到达主程序。如果主程序也没有处理该异常,则程序将自动终止并显示错误信息。
python
1 | def faulty(): |