Не могли бы вы взглянуть на функцию chooseSampleKey
и помочь мне понять, почему она не всегда возвращает значение? Он иногда возвращает значение, а в других случаях возвращает None, поэтому вам придется запускать его несколько раз. Проблема особенно в отрасли, которую я назвал проблемной ветвью. Мне кажется, что код всегда должен возвращать значение, но либо я ошибаюсь где-то, либо есть ошибка в Python.Почему функция не возвращает значение?
import random
peeps = {1: [], 2: [], 3: ['A', 'B'], 4: ['C', 'D'], 5: ['E']}
dictkeys = [1, 2, 4, 5]
def chooseSampleKey(peeps, dictkeys):
if len(dictkeys) > 0:
sampleKey = random.sample(dictkeys, 1)[0]
print 'From chooseSampleKey, sampleKey = ', sampleKey
print "peeps in samplekey: ", len(peeps[sampleKey])
if len(peeps[sampleKey]) > 0:
# **problem branch**: sampleKey is defined and has a value.
# the function comes here and prints the following statement
# with the value of samplekey. However, despite printing
# a value for sampleKey in following line,
# the print for the function itself prints None, i.e., no
# value is returned.
print "Returning samplekey {0}".format(sampleKey)
return sampleKey
else:
dictkeys.remove(sampleKey)
chooseSampleKey(peeps, dictkeys)
else:
return 0
print chooseSampleKey(peepsTemp, [1, 2, 4, 5])
Пожалуйста, запустите код несколько раз, и вы увидите описанную проблему.
Вы уверены, что проблема не в первом предложении 'else:', где нет инструкции 'return'? Если вы хотите рекурсию, вам нужно будет сделать 'return selectSampleKey (peeps, dictkeys)'. –
Нам не нужно запускать код. Он находится прямо в коде в ветке, который не возвращает значение. –
Я согласен, что в первом случае нет возврата. Но я не понимаю следующее: функция печатает, скажем, «Возврат образца 5», который говорит мне, что он достиг области проблемы. В этой ветви есть оператор return. , , поэтому, когда он находится в этой ветви, он должен вернуть значение. Но вместо этого он возвращает None. Почему он даже идет в другую часть? – Curious2learn