在Python 3中,您可以str.isidentifier()
用来测试给定的字符串是否为有效的Python标识符/名称。
>>> 'X'.isidentifier()
True
>>> 'X123'.isidentifier()
True
>>> '2'.isidentifier()
False
>>> 'while'.isidentifier()
True
最后一个示例显示您还应该检查变量名称是否与Python关键字冲突:
>>> from keyword import iskeyword
>>> iskeyword('X')
False
>>> iskeyword('while')
True
from keyword import iskeyword
def is_valid_variable_name(name):
return name.isidentifier() and not iskeyword(name)
在Python 2和3中有效的另一种选择是使用ast
模块:
from ast import parse
def is_valid_variable_name(name):
try:
parse('{} = None'.format(name))
return True
except SyntaxError, ValueError, TypeError:
return False
>>> is_valid_variable_name('X')
True
>>> is_valid_variable_name('123')
False
>>> is_valid_variable_name('for')
False
>>> is_valid_variable_name('')
False
>>> is_valid_variable_name(42)
False
这将解析该赋值语句而不实际执行它。它将获取无效的标识符以及分配给关键字的尝试。在上面的代码中,None
是一个分配给给定名称的任意值- 它可以是RHS的任何有效表达式。