Return 部分结果如果出现异常

Return part of result if occur a except

我正在使用 python。我有一个函数 (getAll),它在循环 (getPart) 中调用其他函数,并且在每个步骤中更新 return 值。在某些情况下,当我调用循环内的函数时,会失败。我需要return这一刻的结果。

def getAll(m, d, v, t, s, tn, type):
  result = []
  flag = 0
  while flag == 0:
    tempResult = getPart(m, d, v)
    for i in range(0, len(tempResult)):
      result.append(tempResult[i])
    flag = tempResult[0]
  return result

print getAll(5,4,1,'ds',8,'data')

我需要打印结果的部分值,如果我在 getAll 中调用 tempResult 时在某个步骤中发生异常

听起来你需要使用 try,除了块

def getAll(m, d, v, t, s, tn, type):
    result = []
    flag = 0
    while flag == 0:
        try: #start of the try block. 
            tempResult = getPart(m, d, v)
            for i in range(0, len(tempResult)):
                result.append(tempResult[i])
            flag = tempResult[0]
        except: #handle what ever errors comes here
            return tempResult
    return tempResult

基本上,当您发现错误或出现错误时,它会 运行 except 块中的内容,因为我们输入 return tempResult 它将 return 值。

正如评论所说,捕获所有异常不是一个好主意,因为您可能会遇到与您的代码无关的错误并且它会捕获它,对于您应该做的特定异常:

try:
    #do something
except <Error name like "ValueError">
    #handle it

您还可以查看更多错误详细信息,例如:

try:
    #do something
except ValueError as e:
    #handle it
    print(e) #prints the error

所以找出什么错误会导致你的程序停止并把它放在那里。

您可以通过用 try/except 包装引发错误的代码来处理异常,然后 except 块中打印 结果:

def getAll(m, d, v, t, s, tn, type):
    result = []
    flag = 0
    while flag == 0:
        try:
            tempResult = getPart(m, d, v)
        except SomeError: # specify error type
            print('The partial result is', result)
            raise  # re-raise error
        for i in range(0, len(tempResult)):
            result.append(tempResult[i])
        flag = tempResult[0]
    return result

print getAll(5,4,1,'ds',8,'data')

另一方面,由于您已经知道调用 getPart 可能会引发错误,因此您可以将 try/except 块移动到函数中。这当然取决于您要实现的目标。

这不一定是最好的解决方案,因为根据错误的不同,以这种方式防止它可能比处理它更好。但是,您可以 try(原本没有双关语......)以下内容(其中 WhateverError 是在您的情况下引发的错误):

def getAll(m, d, v, t, s, tn, type):
  result = []
  flag = 0
  while flag == 0:
    try:
      tempResult = getPart(m, d, v)
    except WhateverError:
      return result
    for i in range(0, len(tempResult)):
      result.append(tempResult[i])
    flag = tempResult[0]
  return result

print getAll(5,4,1,'ds',8,'data')

尝试将您的方法包装起来,除了块。您可能想要引发异常,以便您也可以响应它。

def getAll(m, d, v, t, s, tn, type):
    result = []
    flag = 0
    try:
        while flag == 0:
            tempResult = getPart(m, d, v)
            for i in range(0, len(tempResult)):
              result.append(tempResult[i])
            flag = tempResult[0]
        return result
    except Exception as e:
        print e
        return result