Python之异常处理

发布时间:2019-03-14 23:32:31编辑:auto阅读(1926)

    错误包括语法错误和逻辑错误

    异常是程序运行时发生错误的信号,解释器追踪程序,根据错误抛出的异常。

    异常

    常用的异常:

    AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError 输入/输出异常;基本上是无法打开文件
    ImportError 无法引入模块或包;基本上是路径问题或名称错误
    IndentationError 语法错误(的子类) ;代码没有正确对齐
    IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的

     

    异常处理是为了防止程序崩溃

    if判断可以做异常处理但是重复性高和可读性差,不可行。

     

      正统异常处理机制:

    try:

      被检测的代码块

    except 异常类型:

      try中一旦检测到异常,就执行这个位置的逻辑

      多分支和万能异常

     1 s1 = 'hello'
     2 try:
     3     int(s1)
     4 except IndexError as e:
     5     print(e)
     6 except KeyError as e:
     7     print(e)
     8 except ValueError as e:
     9     print(e)
    10 #except Exception as e:
    11 #    print(e)
    12 else:
    13     print('try内代码块没有异常则执行我')
    14 finally:
    15     print('无论异常与否,都会执行该模块,通常是进行清理工作')

    输出

    invalid literal for int() with base 10: 'hello'
    无论异常与否,都会执行该模块,通常是进行清理工作

     

      主动触发异常

    1 try:
    2     raise TypeError('类型错误')
    3 except Exception as e:
    4     print(e)

    输出

    类型错误

     

    1 class EgonException(BaseException):
    2     def __init__(self,msg):
    3         self.msg=msg
    4 try:
    5     raise EgonException('类型错误')
    6 except EgonException as e:
    7     print(e)

    输出

    类型错误

     

      断言

    assert 表达式(获取一个布尔值,True则继续下面代码,False则抛出AssertionError)  

     

      异常处理特性

    1:把错误处理和真正的工作分开来
    2:代码更易组织,更清晰,复杂的工作任务更容易实现;
    3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

      尽量少用,会降低代码可读性

     

关键字