如果发生除外,返回部分结果

时间:2016-10-14 17:59:13

标签: python except

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

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的某个步骤中发生了除外

4 个答案:

答案 0 :(得分:3)

听起来你需要使用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它将返回值。

就像评论所说的那样,捕获所有异常都是一个坏主意,因为你可能会遇到一个与你的代码无关的错误,它会捕获它,对于你应该做的特定例外:

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

您还可以看到更多错误详情,例如:

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

因此,找出导致程序停止并将其放在那里的错误。

答案 1 :(得分:3)

您可以通过在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块移动到该函数中。这当然取决于你究竟想要达到的目的。

答案 2 :(得分:1)

这不一定是最好的解决方案,因为根据错误,防止它可能比以这种方式处理它更好。但是,您可以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')

答案 3 :(得分:1)

尝试包装你的方法,块除外。您可能希望引发异常,以便您也可以对其进行响应。

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