python的错误:

  • 语法错误:冒号,逗号,括号错误;关键字拼写错误;缩进不正确;空缺语句块缺少pass语句等
  • 逻辑错误:指的是错误的运行结果,包括运算符优先级考虑不周;变量名使用不正确;语句块缩进层次不对;在布尔表达式中出错。
  • 运行时的错误:主要包括以下几类:使用未定义的标识符(NameError);除数为 0(ZeroDivisionError);打开的文件不存在(FileNotFoundError);导入的模块没被找到(ImportError)。

Python中的异常处理机制:

  • 在Python当中,若一个程序在运行的时候出错,Python解释器会自动的在出错的地方生成一个异常对象;
  • 然后Python解释器会自动的在出错地方的附近寻找有没有对这个异常对象处理的代码,所谓异常处理代码就是try……except语句,
  • 如果没有,Python解释器会自动的将这个异常对象抛给其调用函数,就这样层层抛出,如果在main当中也没有对这个异常对象处理的代码;
  • Python解释器(实际上是操作系统)最后会做一个简单粗暴的处理,将整个程序给终止掉,并将错误的信息在显示屏上输出。 

python中的异常捕获语句

1 基础的语法:

try:
    <statements>        #运行try语句块,并试图捕获异常
except <name1>:
    <statements>        #如果name1异常发现,那么执行该语句块。
except (name2, name3):
    <statements>        #如果元组内的任意异常发生,那么捕获它
except <name4> as <variable>:
    <statements>        #如果name4异常发生,那么进入该语句块,并把异常实例命名为variable
except:
    <statements>        #发生了以上所有列出的异常之外的异常
else:
<statements>            #如果没有异常发生,那么执行该语句块
finally:
    <statement>         #无论是否有异常发生,均会执行该语句块。
  • else和finally是可选的,可能会有0个或多个except,但是,如果出现一个else的话,必须有至少一个except。

2 assert语句:

assert主要用来做断言,通常用在单元测试中较多。

3 raise语句 : raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行

常见的异常:

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

实例1:读取文件的异常处理

def readExcelDataByName(fileName, sheetName):
    table = None
    errorMsg = None
    try:
        data = xlrd.open_workbook(fileName)
        table = data.sheet_by_name(sheetName)
    except Exception as e:
        errorMsg = e  
    return table, errorMsg