当前位置:   article > 正文

python 错误代码和异常系统设计

python 错误代码和异常系统设计

问题来源:
在开发界面和逻辑部分分离开发的时候,为了让用户知道当前逻辑运行出错时,界面上友好提示用户,怎样操作去正常执行。这时候就需要要错误代码设计和所有逻辑API接口返回格式一致。在返回内容格式中,包含错误代码、错误名,错误描述以及数据。

现有技术分析:

Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉的SystemExit异常,会话就会终止。

  1. try/except:捕捉由代码中的异常并恢复,匹配except里面的错误,并自行except中定义的代码,后继续执行程序(发生异常后,由except捕捉到异常后,不会中断程序,继续执行try语句后面的程序)

  2. try/finally: 无论异常是否发生,都执行清理行为 (发生异常时程序会中断程序,只不过会执行finally后的代码)

  3. raise: 手动在代码中接触发异常。

  4. assert: 有条件地在程序代码中触发异常。

解决方案:

raise语句手工引发一个异常: 自定义异常
  • 1
raise [exception[,data]]
  • 1

在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称。异常名称标识出具体的类:Python异常是那些类的对象。执行raise语句时,Python会创建指定的异常类的一个对象。raise语句还可指定对异常对象进行初始化的参数。为此,请在异常类的名称后添加一个逗号以及指定的参数(或者由参数构成的一个元组)。

例:

try:

    raise MyError #自己抛出一个异常

except MyError:

    print 'a error'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过把警告和错误抛出异常,这样在给UI提示是,通过逻辑API返回的数据结构,可以清楚知道逻辑部分运行过程实时的问题,并能提高用户体验。
错误代码,可以采用几位数表示,组合表示,只要能区分错误或警告问题

直接上代码

#coding = utf-8
#author = ao.deng

class Result:
    def __init__(self):
        self.name = ''
        self.code = ''
        self.description = ''
        self.data ={}

    def setData(self,*args):
        self.data=args

    def getData(self):
        return self.data


class RuntimeException(Exception):
    '''''A user-defined exception class.'''

    def __init__(self, name, code,description):
        Exception.__init__(self)
        self.name = name
        self.code = code
        self.description = description


class Test:
    def printD(self,i):
        if i  > 2:
            raise RuntimeException("数据太大", '1100',"i>3")
    def printDD(self,i):
        a = [0]
        i += 1
        print(a[i])
    def printDDD(self,i):
        a= [0,1]
        i+=1

        if i ==1:
            raise RuntimeException("假设需要警告", '1101', "a[%d]" % i)  #它会抛给最近except去捕获
            return
        try:
            print(a[i])
        except Exception as x:
            raise RuntimeException("越界", '1001',"a[%d]"%i)

    def printDDDD(self,i):
        a= [0,1]
        i+=1
        try:
            if i > 1:
                raise RuntimeException("警告", '1101', "a[%d]" % i)  #它会抛给最近except去捕获
                return
            print(a[i])
        except Exception as x:
            raise RuntimeException("越界", '1001',"a[%d]"%i)

    def test(self):

        mResultList=[]
        for i in range(5):
            try:
                # self.printD(i)
                # self.printDD(i)
                self.printDDD(i)

            except RuntimeException as x:
                mResult = Result()
                mResult.name = x.name
                mResult.code = x.code
                mResult.description = x.description
                mResult.setData({})
                mResultList.append(mResult)
                if x.code[1]=='1':
                    print("警告 继续")
                    continue
                else:
                    return mResultList

            except Exception as e:
                mResult = Result()
                mResult.name = "Error"
                mResult.code = "1001"
                mResult.description = str(e)
                mResult.setData({})
                mResultList.append(mResult)
                return mResultList

        mResult = Result()
        mResult.name = "Ok"
        mResult.code = "1000"
        mResult.description = "运行正确"
        mResult.setData([1, 3, 5], {2: 3}, 4, 5, i)
        mResultList.append(mResult)
        return mResultList

if __name__=="__main__":
    mTest =Test()
    xxList=mTest.test()
    for xx in xxList:
        print(xx.code)
        if xx.code[1]=='1':
            print("警告")
        elif xx.code== "1001":
            print("错误")
        else:
            print("正确")
        print(xx.name)
        print(xx.description)
        print(xx.getData())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/205042
推荐阅读
相关标签
  

闽ICP备14008679号