Linux中变量名含-时如何使用eval?报错原因及解决方法
问题解答
为什么my-value会被拆分识别?
在Python里,-是减法运算符,当你执行eval('my-value')时,解释器会把这段字符串解析成表达式my - value——也就是试图计算变量my减去变量value。因为你既没定义my也没定义value,所以抛出NameError: name 'my' is not defined的错误。
而myval是符合Python变量命名规则的标识符(仅由字母组成),所以eval('myval')会直接尝试查找名为myval的变量,找不到就报错NameError: name 'myval' is not defined,二者的解析逻辑完全不同。
如何处理包含-的标识符?
Python的变量命名规则明确禁止使用-,变量名只能由字母、数字、下划线组成,且不能以数字开头。如果业务场景中必须使用带-的标识,别直接把它当变量用,推荐用字典存储:
- 先定义字典,把带
-的标识作为键:
my_data = {'my-value': 42}
- 若一定要用
eval(不推荐,eval存在安全风险),可以这么写:
eval("my_data['my-value']")
- 更安全的方式是直接用字典索引,完全不用
eval:
print(my_data['my-value']) # 输出42
内容的提问来源于stack exchange,提问作者XYZ
相关产品推荐
相关产品推荐

