您的位置:首页 > 编程语言 > Python开发

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

2017-11-29 11:20 357 查看
问题来源:

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

现有技术分析:

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

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

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

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

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

解决方案:

用raise语句手工引发一个异常: 自定义异常


raise [exception[,data]]


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

例:

try:

raise MyError #自己抛出一个异常

except MyError:

print 'a error'


通过把警告和错误抛出异常,这样在给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())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息