TypeError: объект 'int' не является итерируемым при передаче аргументов в функцию
У меня есть функция, которая выполняет некоторые вычисления на основе отфильтрованного набора запросов. Я хочу передать аргументы в функцию для информирования фильтра. Основы:
Представление для проверки вывода:
def TestPlayerData(request):
data = PlayerData(1,2)
print(data)
return HttpResponse(data)
Вызванная функция:
def PlayerData(game, player):
"""This is a function based on EventFilterView"""
opponent = [2]
qs = Event.objects.filter(g_players=player).filter(g_name__in=game).filter(g_players__in=opponent)
count_wins = len(qs.filter(g_winner=player))
count_played = len(qs.filter(g_players=player))
if count_played == 0:
win_ratio = 'na'
else:
win_ratio = count_wins/count_played
return count_wins, count_played, win_ratio
Получена ошибка: "TypeError: 'int' object is not iterable"
Однако, если я явно называю переменные в функции, а не передаю их из представления, функция работает так, как ожидалось - примерно так:
def PlayerData():
"""This is a function based on EventFilterView"""
game = [1]
player =2
opponent = [2]
qs = Event.objects.filter(g_players=player).filter(g_name__in=game).filter(g_players__in=opponent)
count_wins = len(qs.filter(g_winner=player))
count_played = len(qs.filter(g_players=player))
if count_played == 0:
win_ratio = 'na'
else:
win_ratio = count_wins/count_played
return count_wins, count_played, win_ratio
Я явно не понимаю основ python и был бы признателен за подсказку в правильном направлении.
В первом блоке кода вы передаете data = PlayerData(1,2)
PlayerData() однако в конечном итоге использует .filter() на параметрах, что невозможно сделать на int, что вызовет ошибку TypeError.
В вашем последнем примере, где вы вписываете свои собственные # после факта, вы передаете game как список, где в первом блоке кода game было int. Вы передаете его правильно, когда делаете это вручную.