我正在使用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的某个步骤中发生了除外
答案 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