《Python核心编程》第10章错误和异常学习笔记

10.1 Python中的异常

  1. NameError:尝试访问一个未申明的变量
  2. Zer0DivisionError:除数为零
  3. SyntaxError:Python解释器语法错误
  4. IndexError:请求的索引超出序列范围
  5. KeyError:请求一个不存在的字典关键字
  6. IOError:输入/输出错误
  7. Attribute:尝试访问位置的对象属性
  8. ValueError:值错误
  9. TypeError:类型错误,通常指赋值左右两边类型不相同产生的错误

10.2 检测和处理异常

10.2.1 try-except语句

try:
    try_suite    #监控这里的异常
except Exception1[, reason1]:
    except_suite1    #异常处理代码1
except Exception2[, reason1]:
    except_suite1    #异常处理代码2
except Exception3[, reason1]:
    except_suite1    #异常处理代码3
...

还可以将多个异常放于一个expect语句中:

try:
    try_suite    #监控这里的异常
except (Exception1, Exception2)[, reason1]:
    except_suite    #异常处理代码

由于异常在Python 2.5中,被迁移到了新式类上,启用了一个新的“所有异常之母”,这个类叫做BaseException,KeyboardInterrupt和SystemExit与Exception平级。

如果需要捕获所有异常,那么可以这样写:

try:
    try_suite    #监控这里的异常
except BaseException, e:
    except_suite    #对所有异常的处理代码

10.2.2 try-finally语句

try-finally与try-excpet区别在于它不是用来捕捉异常的,它常常用来维持一致的行为而无论异常是否发生。

try:
   try_suite
finally:
    finally_suite  #无论如何都执行

举个例子:当尝试读取一个文件的时候抛出异常,最终还是需要关闭文件,代码可以这样处理:

try:
    try:
        ccfile = open('carddata.txt','r')
        txns = ccfile.readlines()
    except IOError:
        log.write('no txns this month\n')
finally:
    ccfile.close()

10.2.3 try-except-else-finally语句总结

try:
    try_suite
except Exception1:
    suite_for_Exception1
except (Exception2, Exception3, Exception4):
    suite_for_Exception_2_3_and_4
except Exception5, Argument5:
    suite_for_Exception5_plus_argument
except (Except6, Except7), Argument76:
    suite_for_Exception6_and_7_plus_argument
except:
   suite_for_all_other_exceptions
else:
    no_exceptions_detected_suite
finally:
    always_execute_suite

你可能感兴趣的:(《Python核心编程》第10章错误和异常学习笔记)