• python-异常处理


    什么是异常?异常和错误的区别

    •  Error 语法错误 比较明显的错误 在编译代码阶段就能检测出来
    • Iteration 异常 在执行代码的过程中引发的异常

    异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下

    python中的异常种类

    在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

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

    异常处理

    异常发生之后的效果:

    •  一旦在程序中发生异常,程序就不再继续执行了

    最简单的异常处理

    # l = ['登录','注册','退出']
    # for i in enumerate(l,1):
    #     print(i[0],i[1])
    # try:
    #     num = int(input('num :'))
    #     print(l[num-1])
    # except IndexError:
    #     print('请输入一个数字'

    多分支异常处理

    # l = ['登录','注册','退出']
    # for i in enumerate(l,1):
    #     print(i[0],i[1])
    # try:
    #     num = int(input('num :'))
    #     print(l[num-1])
    # except ValueError:
    #     print('请输入一个数字')
    # except IndexError:
    #     print('您输入的数字无效')

    万能异常

    # try:
    #     name  # NameError
    #     dic = {}
    #     dic['key']
    # except Exception as 变量名:
    #     print(type(变量名),变量名,变量名.__traceback__.tb_lineno)
    
    # 万能异常和其他分支合作 : 万能异常永远要放在所有except的最后
    # try:
    #     name
    #     [][3]
    #     import a
    # except NameError:pass
    # except IndexError:pass
    # except Exception:pass

    异常处理的其他机制

    # 异常处理的其他机制
    # try:
    #     name
    #     [][3]
    # except IndexError:print('index error')
    # except NameError:print('name error')
    
    # try:
    #     name
    #     [][3]
    # except (IndexError,NameError) as e:
    #     print(e)
    
    # try:
    #     a = 1
    #     # name
    #     # [][3]
    # except NameError:
    #     print('name error')
    # except Exception:
    #     print('万能异常')
    # else: # try中的代码正常执行 没有异常的时候会执行else中的代码
    #     print('执行else了')
    # finally: # 无论如何都会执行 操作系统资源归还的工作
    #     print('执行finally了')
    # try:
    #     f = open('file','w')
    #     # f.read()
    #     exit()
    # except:pass
    #     # 复杂的逻辑
    # finally:
    #     f.close()
    #     print('执行我啦')
    #
    # def func():
    #     try:
    #         f = open('file', 'w')
    #         return f.read()
    #     finally:
    #         f.close()
    #         print('执行我了')
    #
    # func()
    
    # try/except
    # try/except/else
    # try/except/else/finally
    # try/except/finally
    # try/finally
    异常处理的其他机制

    主动抛异常

    # try:
    #     num = int(input('>>>'))
    # except Exception:
    #     print('在出现了异常之后做点儿什么,再让它抛异常')
    #     raise  # 原封不动的抛出try语句中出现的异常

    自定义异常

    # 自定义异常
    # raise NameError('这是一个name error的异常')
    # class EvaException(Exception):
    #     def __init__(self,msg):
    #         self.msg = msg
    #
    # raise EvaException('这是一个什么什么错误,有什么问题')

    断言

    # 断言
    # assert 布尔值
    # assert True
    # if False:
    #     print(1234234)
    # else:
    #     raise AssertionError
    幻想毫无价值,计划渺如尘埃,目标不可能达到。这一切的一切毫无意义——除非我们付诸行动。
  • 相关阅读:
    C#Redis哈希Hashes
    C#Redis集合set
    C#Redis列表List
    C#Redis字符串
    入门redis
    C#/Net代码精简优化技巧
    单点登录在asp.net中的简单实现
    sql注入
    数据库sql优化
    常常忘记但是很重要的sql语句
  • 原文地址:https://www.cnblogs.com/TodayWind/p/13921278.html
Copyright © 2020-2023  润新知