En tant que développeur Python, j'ai récemment rencontré un problème étrange où les boucles de mon code n'étaient pas itérées comme je m'y attendais. J'avais une fonction qui parcourait une liste de plages de dates pour vérifier si un horodatage se situait dans l'une des plages.
Mon code ressemblait à ceci :
def check_timestamp(timestamp):
date_ranges = generate_ranges()
for range in date_ranges:
print("First loop")
for range in date_ranges:
print("Second loop")
def generate_ranges():
return (
{'start': date1, 'end': date2}
for date1, date2 in zip(start_dates, end_dates)
)
Après quelques débogages, j'ai remarqué que le problème avait disparu lorsque j'ai modifié generate_ranges()
pour renvoyer une liste au lieu d'une expression génératrice :
def generate_ranges():
return [
{'start': date1, 'end': date2}
for date1, date2 in zip(start_dates, end_dates)
]
Il semble que l'expression du générateur introduisait un comportement inattendu entre les boucles. En forçant l’évaluation dans une liste, cela a résolu la bizarrerie.
Donc, si jamais vous voyez des boucles dans votre code Python qui ne s'itèrent pas comme prévu, recherchez les expressions génératrices qui pourraient introduire des bogues subtils. Les convertir en listes/tuples standard est un moyen simple d'exclure les problèmes d'itérateur.
Faites-moi savoir si vous avez d'autres questions !