Python——异常处理

一、定义:

       异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

二、异常处理标准模块

try:
     被检测的代码块
except 异常类型:
     try中一旦检测到异常,就执行这个位置的逻辑
else:
  执行的代码 
finally:
    不管代码时候有异常都执行

 三、内置异常层次结构

 1 '''
 2 BaseException  # 所有异常的基类
 3  +-- SystemExit  # 解释器请求退出
 4  +-- KeyboardInterrupt  # 用户中断执行(通常是输入^C)
 5  +-- GeneratorExit  # 生成器(generator)发生异常来通知退出
 6  +-- Exception  # 常规异常的基类
 7       +-- StopIteration  # 迭代器没有更多的值
 8       +-- StopAsyncIteration  # 必须通过异步迭代器对象的__anext__()方法引发以停止迭代
 9       +-- ArithmeticError  # 各种算术错误引发的内置异常的基类
10       |    +-- FloatingPointError  # 浮点计算错误
11       |    +-- OverflowError  # 数值运算结果太大无法表示
12       |    +-- ZeroDivisionError  # 除(或取模)零 (所有数据类型)
13       +-- AssertionError  # 当assert语句失败时引发
14       +-- AttributeError  # 属性引用或赋值失败
15       +-- BufferError  # 无法执行与缓冲区相关的操作时引发
16       +-- EOFError  # 当input()函数在没有读取任何数据的情况下达到文件结束条件(EOF)时引发
17       +-- ImportError  # 导入模块/对象失败
18       |    +-- ModuleNotFoundError  # 无法找到模块或在在sys.modules中找到None
19       +-- LookupError  # 映射或序列上使用的键或索引无效时引发的异常的基类
20       |    +-- IndexError  # 序列中没有此索引(index)
21       |    +-- KeyError  # 映射中没有这个键
22       +-- MemoryError  # 内存溢出错误(对于Python 解释器不是致命的)
23       +-- NameError  # 未声明/初始化对象 (没有属性)
24       |    +-- UnboundLocalError  # 访问未初始化的本地变量
25       +-- OSError  # 操作系统错误,EnvironmentError,IOError,WindowsError,socket.error,select.error和mmap.error已合并到OSError中,构造函数可能返回子类
26       |    +-- BlockingIOError  # 操作将阻塞对象(e.g. socket)设置为非阻塞操作
27       |    +-- ChildProcessError  # 在子进程上的操作失败
28       |    +-- ConnectionError  # 与连接相关的异常的基类
29       |    |    +-- BrokenPipeError  # 另一端关闭时尝试写入管道或试图在已关闭写入的套接字上写入
30       |    |    +-- ConnectionAbortedError  # 连接尝试被对等方中止
31       |    |    +-- ConnectionRefusedError  # 连接尝试被对等方拒绝
32       |    |    +-- ConnectionResetError    # 连接由对等方重置
33       |    +-- FileExistsError  # 创建已存在的文件或目录
34       |    +-- FileNotFoundError  # 请求不存在的文件或目录
35       |    +-- InterruptedError  # 系统调用被输入信号中断
36       |    +-- IsADirectoryError  # 在目录上请求文件操作(例如 os.remove())
37       |    +-- NotADirectoryError  # 在不是目录的事物上请求目录操作(例如 os.listdir())
38       |    +-- PermissionError  # 尝试在没有足够访问权限的情况下运行操作
39       |    +-- ProcessLookupError  # 给定进程不存在
40       |    +-- TimeoutError  # 系统函数在系统级别超时
41       +-- ReferenceError  # weakref.proxy()函数创建的弱引用试图访问已经垃圾回收了的对象
42       +-- RuntimeError  # 在检测到不属于任何其他类别的错误时触发
43       |    +-- NotImplementedError  # 在用户定义的基类中,抽象方法要求派生类重写该方法或者正在开发的类指示仍然需要添加实际实现
44       |    +-- RecursionError  # 解释器检测到超出最大递归深度
45       +-- SyntaxError  # Python 语法错误
46       |    +-- IndentationError  # 缩进错误
47       |         +-- TabError  # Tab和空格混用
48       +-- SystemError  # 解释器发现内部错误
49       +-- TypeError  # 操作或函数应用于不适当类型的对象
50       +-- ValueError  # 操作或函数接收到具有正确类型但值不合适的参数
51       |    +-- UnicodeError  # 发生与Unicode相关的编码或解码错误
52       |         +-- UnicodeDecodeError  # Unicode解码错误
53       |         +-- UnicodeEncodeError  # Unicode编码错误
54       |         +-- UnicodeTranslateError  # Unicode转码错误
55       +-- Warning  # 警告的基类
56            +-- DeprecationWarning  # 有关已弃用功能的警告的基类
57            +-- PendingDeprecationWarning  # 有关不推荐使用功能的警告的基类
58            +-- RuntimeWarning  # 有关可疑的运行时行为的警告的基类
59            +-- SyntaxWarning  # 关于可疑语法警告的基类
60            +-- UserWarning  # 用户代码生成警告的基类
61            +-- FutureWarning  # 有关已弃用功能的警告的基类
62            +-- ImportWarning  # 关于模块导入时可能出错的警告的基类
63            +-- UnicodeWarning  # 与Unicode相关的警告的基类
64            +-- BytesWarning  # 与bytes和bytearray相关的警告的基类
65            +-- ResourceWarning  # 与资源使用相关的警告的基类。被默认警告过滤器忽略。
66  
67 '''

四、自定义异常

       通过创建一个新的异常类拥有自己的异常,自定义的异常类必须是Exception或者Error的子类!

#!/usr/bin/env python
# encoding: utf-8

class IllegalException(Exception):
    '''
    Custom exception types
    '''
    def __init__(self, parameter, para_value):
        err = 'The parameter "{0}" is not legal:{1}'.format(parameter, para_value)
        Exception.__init__(self, err)
        self.parameter = parameter
        self.para_value = para_value

五、万能异常

s1 = 'hello'
try:
    int(s1)
except Exception:
    print(e)

注:有了万能异常仍然要写单独的异常,来确定异常的错误,万能异常要写到所有的异常最后面

posted @ 2018-10-09 08:00  澄心元素  阅读(160)  评论(0编辑  收藏  举报