{'exploding_selected': False, 'color': <Color.Blue: 4>}
Traceback (most recent call last):
File "./main.py", line 152, in <module>
main()
File "./main.py", line 38, in main
run(game_data)
File "./main.py", line 75, in run
interact(game_data)
File "./main.py", line 99, in interact
Table.explode_selected(table)
File "./Table.py", line 124, in explode_selected
exploded = explode_baloon(self, *self['selected'])
File "./Table.py", line 231, in explode_baloon
neighbours_positions = get_neighbours_positions(self, x, y)
File "./Table.py", line 254, in get_neighbours_positions
if neighbour['color'] == current['color']:
TypeError: 'bool' object is not subscriptable
Est-ce que quelqu’un saurait comment faire pour ne plus avoir ce problème ?
PS: Le print est présent uniquement pour le debug, sa sortie est à la première ligne des logs.
PPS: L’erreur n’est pas levée systématiquement. Je ne sais pas pourquoi car tous les neighbour ont la même structure ou valent False et ne passent pas le premier if.
Si ta variable neighbour vaut un booléen (True ou False), il ne sera pas possible d’appliquer la ligne neighbour['color']. C’est je pense l’erreur qu’essaye de te faire comprendre ton interpréteur.
Et si il vaut False, les lignes 2, 3 et 4 de l’extrait ci-dessus ne sont pas exécutées, et donc l’erreur n’est pas possible puisque la ligne qui la génère n’est pas exécutée.
C’est justement pour ça que je ne comprends pas pourquoi cette erreur arrive.
Le fait que ta variable neighbour ou current est deux types de valeur possible est discutable niveau conception, ça va forcément provoquer des bugs voir des incompréhensions lors d’une prochaine lecture. Il faudra penser à une logique en ce sens
L’idiome pour ça, c’est d’utiliser le singleton None pour marquer les choses vides et de tester avec neighbour is None ou neighbour is not None. On comprend tout de suite que None est sentinelle marquant un cas particulier qui ne correspond pas à une valeur "normale" de la variable.
Avec None comme indiqué par adri1, voir un dictionnaire vide puis un test du même style que tu as présenté. Mais cela va dépendre peut-être de la manière dont tu insères tes clés. Mais comme toujours une conception à la résolution d’un problème se réfléchi avant de coder et doit suivre une logique simple et efficace.
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