Je travaille sur une interface graphique simple en utilisant pygame. À un certain point, j'en avais marre des erreurs d'indentation constantes dues au mélange d'onglets et d'espaces, alors j'ai décidé d'utiliser vi pour remplacer tous les onglets par 4 espaces. Après cela, je reçois une erreur à propos de pygame.font.SysFont n'étant pas initialisé, même si c'était avant. Naturellement, je pense que cela a quelque chose à voir avec moi en changeant simplement les tabulations pour les espaces, donc je m'assure que tout est correctement mis en retrait etc. Je commente 95% du code et commence à comparer avec une ancienne version du code. ancien code à la nouvelle. Puisqu'ils semblent être identiques (en utilisant cat -A file.py pour comparer aussi les caractères invisibles).Erreur étrange lors de l'utilisation d'espaces au lieu de tabulation en Python
Je trouve enfin que c'est le coupable: trouble-maker
Ceci est la seule chose (ce n'est pas entre guillemets triples) qui est différent entre les deux fichiers. Changer cette ligne pour avoir un onglet résout effectivement le problème. Donc, problème résolu, je suppose. La question est: Comment est-ce possible? Les espaces ne devraient-ils pas être moins sujets aux erreurs que les tabulations?
Le code ressemble à ceci:
import pygame
pygame.init()
class GameMenu():
def __init__(self, screen, items, bg_color=(237,237,223), font="Verdana", font_size=30,
font_color=(237, 28, 36)):
self.screen = screen
self.scr_width = self.screen.get_rect().width
self.scr_height = self.screen.get_rect().height
self.bg_color = bg_color
self.clock = pygame.time.Clock()
self.items = items
self.font = pygame.font.SysFont(font, font_size)
self.font_color = font_color
"""
rest of the code commented out
"""
pygame.quit()
if __name__ == "__main__":
screensize = 0
screen = pygame.display.set_mode((640, 480), screensize, 32)
menu_items = ('1', '2', '3', '4', '5')
pygame.display.set_caption('numbers')
pygame.mouse.set_visible(True)
gm = GameMenu(screen, menu_items)
Qu'est-ce que je manque ici? Pourquoi un onglet pygame.quit avant() travailler, mais sans 4 espaces, il donne « pygame.error: police non initialisé »
EDIT: Voici le retraçage
Traceback (most recent call last):
File "testMenu.py", line 168, in <module>
gm = GameMenu(screen, menu_items)
File "testMenu.py", line 31, in __init__
self.font = pygame.font.SysFont(font, font_size)
File "/usr/lib/python2.7/dist-packages/pygame/sysfont.py",
line 614, in SysFont
return constructor(fontname, size, set_bold,
set_italic)
File
"/usr/lib/python2.7/dist-packages/pygame/sysfont.py", line 537, in font_constructor
font = pygame.font.Font(fontpath, size)
pygame.error: font not initialized
S'il vous plaît noter également qu'il ne soit pas tenu de le faire pygame.font.init(), voir https://www.pygame.org/docs/tut/ImportInit.html
Pouvez-vous fournir le retraçage, etc.? (La sortie de l'interpréteur montre). –
Les tabulations sont [8 espaces en Python, pas en 4] (https://docs.python.org/2/reference/lexical_analysis.html#indentation). – wildwilhelm
Est-ce que 'pygame.quit()' est supposé être dans la méthode '__init__'? FWIW, Python utilise des tabulations fixes de taille 8. –