Je viens de passer près d'une heure à rechercher ce qui était - à l'époque - un message d'erreur très confus. La source de l'erreur était ce bloc de code (aux fins de cette question, le sens de toutes les pièces n'a pas d'importance):Évitez d'être mordu par un espace de noms contaminé
fspec_prsrs = tuple(compile('{{{}{}}}'.format(fstr_tup.field_name
if fstr_tup.field_name else '',
':'+fstr_tup.format_spec
if fstr_tup.format_spec else ''
)
)
for fstr_tup in fstr_tuples)
Ce qui a donné lieu à cette erreur:
*** TypeError: Required argument 'filename' (pos 2) not found
La cause de l'erreur est que j'ai négligé de faire une importation de la fonction compile
en haut du fichier (à partir du parse
module). Par conséquent, compile
fait référence à built-in compile
function. Bien que le message d'erreur me semble très clair maintenant que je comprends la cause, j'ai perdu beaucoup de temps à regarder le code source du paquet à partir duquel pensait J'avais importé la fonction, pensant que l'erreur venait de là. Au lieu de cela, il venait de la compile
intégré tout au long.
La fonction compile
est quelque chose que j'ai tendance à oublier même s'il existe. Je l'utilise presque jamais, si jamais, et en effet il y a un certain nombre de fonctions dans la liste intégrée, tout comme compile
que j'utilise également jamais (je regarde VOUS, id
et VOUS, filter!), Et par conséquent ils sont assis là à ne rien faire d'autre que de contaminer mon espace de noms.
Typiquement, lorsque vous oubliez d'importer quelque chose, vous obtenez simplement NameError
, auquel cas la cause est évidente; mais quand il y a des choses qui se cachent dans l'espace de noms que je n'ai pas mis là, c'est beaucoup moins évident. Existe-t-il un moyen complet d'éviter les problèmes de ce genre?
Que peut-on faire? Ou est-ce juste quelque chose que chaque codeur Python doit apprendre à vivre avec?
Peut-être utiliser un IDE qui met en évidence les noms intégrés? De cette façon, il sera clair si votre code fait référence à un nom intégré. Pycharm le fait. Ainsi que Sublime. –
@ChristianDean Puisque je n'ai jamais utilisé régulièrement un IDE cette solution ne m'était pas évidente, même si je suis sûr que cela semble évident pour les gens qui l'ont fait. J'ai généralement dit "je n'ai pas besoin d'un IDE" (j'utilise simplement Notepad ++) mais je suppose que ce soir j'ai prouvé que je le faisais. –