Вернуть часть результата, если произойдет, кроме
Я использую 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')
Мне нужно вывести результирующее частичное значение, если произойдет, за исключением некоторого шага, когда я вызываю tempResult в getAll
4 ответа
Похоже, вам нужно использовать попробовать, кроме блоков
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
В основном, когда вы ловите ошибку или возникает ошибка, она будет запускать все, что находится в блоке исключений, так как мы помещаем 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
Так что выясните, какие ошибки приведут к остановке вашей программы, и поместите ее туда.
Вы можете обработать исключение, заключив код, который вызывает ошибку, в 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
блок в функцию. Это зависит, конечно, от того, что именно вы пытаетесь достичь.
Оберните ваш метод в попытке, кроме блока. Возможно, вы захотите вызвать исключение, чтобы вы тоже могли на него ответить.
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
Это не обязательно лучшее решение, поскольку в зависимости от ошибки может быть лучше предотвратить ее, чем обрабатывать таким образом. Тем не менее, вы можете попробовать (без каламбура изначально...) следующее (где 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')