簡體   English   中英

TypeError: 'int' object 在將 arguments 傳遞給 function 時不可迭代

[英]TypeError: 'int' object is not iterable when passing arguments to function

我有一個 function,它根據過濾的查詢集進行一些計算。 我正在尋求將 arguments 傳遞給 function 以通知過濾器。 基礎知識:

測試 output 的視圖:

def TestPlayerData(request):
    data = PlayerData(1,2)
    print(data)
    return HttpResponse(data)

調用的 function 是:

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”

但是,如果我明確命名 function 中的變量而不是從視圖中傳遞它們,則 function 會按預期工作——就像這樣:

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。

在您在事后編寫自己的# 的最后一個示例中,您將游戲作為列表傳遞,其中第一個代碼塊中的游戲是一個 int。 當您手動執行時,您正在正確地傳遞它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM