zoukankan      html  css  js  c++  java
  • python_异常处理

    一、异常处理的定义

    # 什么是异常处理
        异常就是程序运行中出现的错误,如果改错误没有相应的处理机制
        那么这个错误就会抛出来,程序也会随之停止运行
    # 为什么要有异常处理
        增强代码的健壮性
        try...except...
    # 如何使用
    # 异常三部分:
    """
    1.报错类型
    2.错误信息的值
    3.错误的定位信息
    """
    # 异常分类
    """
    1.语法上的错误
    2.逻辑上的错误
    """
    # 根据不同的错误类型来获取
    try:
        # d = {'name': 'jason'}
        # d['password']
        a = 1
        x
        l = [1,2,3,4]
        l[123]
    except NameError:
        print('变量未定义')
    except KeyError:
        print('字典键不存在')
    except IndexError:
        print('索引超出范围')
    
    # 执行结果:变量未定义

    万能异常:

    # 万能异常:都能返回报错的信息
    try:
        d = {'name': 'jason'}
        d['password']
        # a = 1
        # x
        # l = [1,2,3,4]
        # l[123]
    except Exception as e:  # 将错误信息的值赋值给变量a
        print(e)
    """
    x:name 'x' is not defined
    l[123]:list index out of range
    d['password'] :'password'
    """

    # 个人建议异常不要频繁使用 能尽量不用就不用 仅仅只加载会出现报错的几个行代码上下,try里面的代码越少越好
    else 与finaly
    try:
        d = {'name': 'jason'}
        d['password']
        # a = 1
        # x
        # l = [1,2,3,4]
        # l[123]
        print('haha')
        pass
    except Exception as e:
        print(e)
    else:
        print('当try里面的代码没有报错的情况下走else')
    finally:
        print('无论前面有没有报错 我都会执行')

    raise:主动抛出异常

    class User:
        def __init__(self,name):
            self.__name = name
        def set_info(self,val):
            if not isinstance(val,str):
                raise TypeError('name字段必须是str类型')
            self.__name = val
    obj = User('simon')
    obj.set_info(123) # TypeError: name字段必须是str类型

    assert:断定

    l = [1,2,3,4]
    assert  len(l) < 0  # AssertionError

    自定义异常:

    class MyError(BaseException):
        def __init__(self,msg):
            self.msg = msg
    
        def __str__(self):
            return '<%s>'%self.msg
    raise MyError('我自己定义了一个异常')

    总结:

    try:
        可能报错的代码块
    except 异常类型 as 异常信息:
        print(异常信息)
    else:
        try监测的代码没有任何bug的情况下才会走else内部代码块
    finally:
        无论是否出bug都会走finally内部的代码块
    
    raise 主动抛出异常
        raise TypeError('异常信息')
    
    assert 断言
    
    自定义异常 继承BaseException  内部定义__str__来显示报错信息





  • 相关阅读:
    Which is best in Python: urllib2, PycURL or mechanize?
    Ruby开源项目介绍(1):octopress——像黑客一样写博客
    Truncated incorrect DOUBLE value解决办法
    Qt Quarterly
    Rich Client Platform教程
    iOS6 中如何获得通讯录访问权限
    省赛热身赛之Javabeans
    [置顶] [开心学php100天]第三天:不羁的PHP文件操作
    hdu2033 人见人爱A+B
    [置顶] AAM算法简介
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/10966450.html
Copyright © 2011-2022 走看看