Variable qui change entre deux assignations

Je suis perplexe...

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

En refactorant du code Django cet après-midi, je lance ma suite de tests après avoir fait mes tests manuels (qui fonctionnaient).

J’ai plusieurs erreurs à cause d’une liste qui ne contiendrait pas une certaine valeur, alors qu’elle devrait la contenir (je fais une recherche de l’index de la valeur justement).

En utilisant le debugger de PyCharm en pas-à-pas, impossible de voir ce qui ne va pas.

Je me décide alors à print la variable, et quelle ne fût pas ma surprise de voir le résultat : le print de la variable renvoie [2, 3, 4] alors que le debugger me dit que la variable vaut [2, 4] !

C’est encore pire, en assignant deux fois d’affilée ma variable, elle ne contient pas la même chose :

Je précise que la fonction get_ordered_subscriptions ne modifie pas la base, grossièrement elle filtre puis elle ordonne les résultats :

def get_accepted_subscriptions(self):
    """
    Returns accepted subscriptions.
    :return: Accepted subscriptions
    :rtype: QuerySet of SideBySideSubscription
    """
    accepted_subscriptions = SideBySideSubscription.objects.filter(
        tournament_id=self.id
    )
    accepted_subscriptions = accepted_subscriptions.filter(
        status=SideBySideSubscription.STATUS_ACCEPTED
    )

    return accepted_subscriptions

def get_ordered_subscriptions(self):
    """
    Get ordered subscriptions.
    :return: Ordered subscriptions
    :rtype: QuerySet of SideBySideSubscription
    """
    return self.get_accepted_subscriptions().order_by("-result", "-score", "-kp")

Par conséquent, je ne comprends pas du tout d’où peut provenir l’erreur. Il m’arrive de temps en temps d’avoir des erreurs bizarres avec la suite de tests de Django, est-ce que ça pourrait venir de là ?

Merci d’avance !

Saut,

En effet ces fonctions ne modifient pas la base, mais elles extraient des données depuis cette base. Tu n’as rien d’autre qui tourne en parallèle qui pourrait altérer la base et donc expliquer que des changements surviennent entre deux appels successifs ?

Salut,

Non je n’avais rien d’autre, mais je pense avoir mis le doigt sur le problème. J’ai l’impression que le souci vient du débugger PyCharm, qui me disait être à cette ligne-là, alors que dans les faits on était un peu plus loin dans le code !

En effet un peu plus loin j’ai trouvé un endroit où je raccourcissais indûment la liste, ce qui provoquait l’erreur dans mon test.

Je suis sous Windows, peut-être que ça joue. En tout cas après quelques heures à m’arracher les cheveux j’ai pu corriger mes tests ! :D

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte