python基础--异常

异常(Exception)
在python程序的执行过程中,难免会出现异常的情况。谁也不想把错误的异常信息直接呈现给用户看,这会有点小尴尬。下面列出了python的常见异常:

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

最后当然你也可以构造自己的异常(最后会简单介绍到)

捕捉异常
那么多类型的异常都有可能出现在我们程序中,请不要害怕,我们可以将他们全部捕捉掉。
捕捉异常一般用try...except...finally语句。
例子:
try:
    result = {'123': 'ABC', '456': 'CDE'}
    print result['789']
except KeyError:
    print 'An exception occurred is a KeyError'
except NameError:
    print 'An exception occurred is a KeyError'
finally:
    print 'OK!'
# 输出结果
# An exception occurred is a KeyError
# OK!
try:将可能出现的异常的语句放在try下面
except:标明处理异常的类型
finally:无论有没有发生错误,始终都执行的语句

捕捉所有异常(并且打印报错信息)
在程序中,可能有一些我们意想不到的错误会出现,我们要将所有的异常捕捉,并且打印异常的具体信息。
import traceback


try:
    result = {'123': 'ABC', '456': 'CDE'}
    print result['789']
except BaseException, err_msg:
    print 'repr(err_msg): %s' % repr(err_msg)
    print 'err_msg.message: %s' % err_msg.message
    print 'traceback.format_exc(): \n%s\n********************' % traceback.format_exc()
finally:
    print 'OK!'
# 输出结果
# repr(err_msg): KeyError('789',)
# err_msg.message: 789
# traceback.format_exc(): 
# Traceback (most recent call last):
#  File "C:/Users/DYY/.PyCharm2016.3/dyy_test.py", line 19, in # 
#    print result['789']
# KeyError: '789'
详解:
repr(err_msg):有错误类型和具体的错误值
err_msg.message:只有具体的错误值
traceback.format_exc():traceback有最具体的错误信息,包括报错所在的脚本,行号,语句,错误类型和错误值都有

抛出异常
if 'Hogan' is 'Hogan':
    raise NameError('Hogan')
# 输出结果:
# Traceback (most recent call last):
#   File "C:/Users/DYY/.PyCharm2016.3/dyy_test.py", line 24, in # 
#     raise NameError('Hogan')
# NameError: Hogan
详解:raise 可以抛出一个异常,后面必须是一个异常的对象实例

自定义异常
class MyException(Exception):
    pass

try:
    if 'Hogan'is 'Hogan':
        raise MyException
except MyException:
    print 'cast my exception'
# cast my exception
详解:上面是自己自定义的一个异常类,继承与Exception类,MyException也等同于KeyError,NameErro等的异常类型

你可能感兴趣的:(python基础篇)