2017-02-21 9 views
2

Y at-il une liste quelque part (ou mieux encore, un module!) Que je peux utiliser pour vérifier si une chaîne est un mauvais choix pour un nom de variable, où "mauvais" est défini comme quelque chose comme "est un mot-clé ou une fonction intégrée, etc."?Noms de variables à éviter en Python

J'ai un script qui génère des classes Python à partir d'un modèle Jinja (modèles Django pour être précis) et je voudrais corriger les noms de champs qui ne conviennent pas pour des raisons comme celles que j'ai mentionnées plus haut.

Jusqu'à présent, j'ai un chèque qui ressemble à ceci:

def is_bad_name(name): 
    return keyword.iskeyword(name) or (name in ["type"]) 

donc une autre façon de formuler ma question serait la suivante: Que dois-je mettre dans cette liste avec « type »?

Je me rends compte qu'il ne peut pas y avoir de liste complète, car elle varie en fonction de ce qui est défini dans les autres modules que j'utilise, mais je me demande s'il y a une bonne liste de choses qui ne devraient jamais être utilisées . Merci!

+2

'__builtins__' est un bon endroit pour commencer. –

+2

Pour obtenir la liste des mots réservés voir http://stackoverflow.com/questions/22864221/is-the-list-of-python-reserved-words-and-builtins-available-in-a-library –

+2

Si vous êtes même en considérant qu'un nom de variable peut entrer en conflit avec quelque chose de intégré, vous donnez déjà des noms erronés à vos variables ... les rendre descriptifs – Sayse

Répondre

3

Vous voulez probablement vérifier contre __builtins__ clés:

>>> __builtins__.keys() 

dict_keys(['AttributeError', 'FloatingPointError', 'NotADirectoryError', 'UnicodeWarning', 'vars', 'delattr', 'chr', 'classmethod', 'iter', 'issubclass', 'isinstance', 'SyntaxWarning', 'SystemError', 'UnicodeError', '__spec__', 'UnboundLocalError', 'filter', 'FileNotFoundError', 'bin', 'frozenset', 'IndexError', 'property', 'type', 'credits', 'next', 'print', '__debug__', 'zip', 'LookupError', 'str', 'int', '__package__', 'hash', 'ArithmeticError', 'all', 'AssertionError', 'EOFError', 'input', 'IsADirectoryError', 'ConnectionResetError', 'ZeroDivisionError', 'max', 'TypeError', 'map', 'round', 'dir', 'license', 'EnvironmentError', 'KeyError', 'UserWarning', 'NameError', 'BytesWarning', 'UnicodeDecodeError', 'compile', 'sorted', 'Exception', 'min', 'ResourceWarning', 'bytearray', 'DeprecationWarning', 'help', 'NotImplemented', 'NotImplementedError', 'ValueError', 'ReferenceError', 'PendingDeprecationWarning', 'PermissionError', '_', 'divmod', 'open', 'MemoryError', 'any', 'bytes', 'ProcessLookupError', 'InterruptedError', 'enumerate', 'FileExistsError', 'complex', 'IOError', 'UnicodeTranslateError', 'Ellipsis', 'abs', 'GeneratorExit', 'quit', 'pow', 'reversed', 'ascii', 'ord', '__build_class__', 'globals', 'float', 'bool', '__name__', 'ImportWarning', 'FutureWarning', 'StopIteration', 'hex', 'None', 'super', 'RuntimeError', '__doc__', 'KeyboardInterrupt', 'eval', 'tuple', 'exec', 'RuntimeWarning', 'ConnectionAbortedError', 'TimeoutError', 'memoryview', 'hasattr', 'BufferError', 'dict', 'setattr', 'set', 'BaseException', '__loader__', 'ConnectionError', 'False', 'OSError', 'TabError', 'OverflowError', 'repr', 'WindowsError', 'staticmethod', 'list', 'oct', 'Warning', 'id', 'SystemExit', '__import__', 'callable', 'UnicodeEncodeError', 'SyntaxError', 'locals', 'getattr', 'len', 'exit', 'range', 'IndentationError', 'ImportError', 'object', 'ConnectionRefusedError', 'BlockingIOError', 'slice', 'copyright', 'ChildProcessError', 'sum', 'format', 'True', 'BrokenPipeError']) 
1

Vous pouvez ajouter __builtins__.__dict__.keys() et sys.builtin_module_names à cette liste