21-python_异常处理

异常处理

filename = raw_input("input file name:")
f = None
try :
    print "trying to open", filename
    f = open(filename)
except NameError, msg :
    print "file name is error!!"
except IOError, msg :
    print "open file failed!!"
finally :
    if None != f :
        f.close()


1. 异常以及异常抛出

   异常抛出机制, 为程序开发人员提供了一种在运行时发现错误,
   进行恢复处理, 然后继续执行的能力.

2. 抛出机制
 
 - 如果在运行时发生异常,解释器会查找相应的处理语句(称为handler)
 - 如果在当前函数里没有找到handler, 它就会将异常抛给调用者.
 - 如果最外层(全面main) 还是没有handler, 解释器就会退出, 
   同时打印traceback
 - 注意: 一般, 错误都会导致异常, 但一个异常不一定代表错误.
         异常有时是一个警告,有时是一个终止信号, 比如退出循环等.

3. 语法 - 捕获与处理

 3.1 try except
    try :
        pass
    except errorType1, msg1:
        pass
    except errorType2, msg2:
        pass
    ...

 3.2 try except finally

    try :
        pass
    except errorType1, msg1:
        pass
    except errorType2, msg2:
        pass
    ...    
    finally :
        pass

4. raise 抛出异常
   - 手动抛出异常 

    >>> raise NameError("Hello, I'm a name error")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: Hello, I'm a name error

5. 常见异常类型
 - AssertionError       assert语句失败
 - AttributeError       试图访问一个对象没有的属性
 - IOError              I/O异常, 基本是无法打开文件
 - ImportError          无法引入模块或包, 基本是路径问题
 - IndentationError     语法错误, 代码没有正确对齐, 缩进有问题
 - IndexError           下标索引超出序列边界
 - KeyError             试图访问字典中不存在的键
 - KeyboardInterrupt    Ctrl+C 被按下
 - NameError            使用一个未初始化的变量
 - SyntaxError          语法错误
 - TypeError            传入的对象类型与要求不符
 - UnboundLocalError    试图访问一个还未设置的全局变量
 - ValueError           传入一个不被期望的值, 即使类型正确

你可能感兴趣的:(异常处理,python)