xone

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

基本异常处理结构:

inp = 'fdsfds'

try:
    num = int(inp)
    print(num)
except Exception as e:   #异常封装到e
    print(e)
    print('数据类型转换失败')

以上代码执行结果:

invalid literal for int() with base 10: 'fdsfds'
数据类型转换失败

异常种类(常用)

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

根据需要捕获异常

Exception放在最后

s1 = 'hello'
try:
    int(s1)
except KeyError as e:
    print '键错误'
except IndexError as e:
    print '索引错误'
except Exception as e:
    print '错误'

异常其他结构

try:
    # 主代码块
    pass
except (KeyError, IndexError):
    # 异常时,执行该块
    pass
else:
    # 没有异常才会执行
    pass
finally:
    # 无论异常与否,最终执行该块
    pass

  

主动触发异常

class ShortInputException(Exception):
    def __init__(self,lenth,limit_lenth):
        self.lenth = lenth
        self.limit_lenth =limit_lenth

def main():
    try:
        s = input("请输入")
        if len(s) < 3:
            # raise引发一个你定义的异常
            raise ShortInputException(len(s), 3)
    except ShortInputException as ret: #ret是个变量,被绑定到了错误实例
        print("ShortInputException:输入长度是%d,长度至少是%d"%(ret.lenth, ret.limit_lenth))


main()

 

打印完整的报错

import  traceback
try:
    int('ds')
except Exception:
    print(traceback.format_exc())

以上代码执行结果

Traceback (most recent call last):
  File "F:/zhou/python/cmdb/autoclient/src/test.py", line 103, in <module>
    int('ds')
ValueError: invalid literal for int() with base 10: 'ds'

 

posted on 2017-05-03 11:12  周小百  阅读(156)  评论(0编辑  收藏  举报