X 未定义,但 x 已定义

问题描述 投票:0回答:1

我正在使用 python 为 ti-84 编写一个程序。它旨在从用户处获取方程,对其进行处理,并为该方程绘制斜率点场。给我带来问题的部分是评估(我知道,安全风险),当我评估方程时,它给我一个错误,“名称‘x’未定义”。仅当在计算器上运行程序时才会出现此错误,当我在计算机上运行该代码段时不会出现此错误。问题是“x”已经被定义了。为什么会出现这种情况?

for pos_x in range(plt.xmin, plt.xmax):
    for pos_y in range(plt.ymin, plt.ymax):
        x = pos_x-0.25
        y = pos_y-0.25
        x0 = eval(self.equation)
        x += 0.5
        x1 = eval(self.equation)
        y0 = eval(self.equation)
        y += 0.5
        y1 = eval(self.equation)
python variables calculator
1个回答
0
投票

您对

eval
的调用使用当前全局范围作为其计算的表达式的全局 本地命名空间。我假设你的循环在一个函数中,这意味着
x
not 为传递给
eval
的代码定义的。要解决这个问题,您需要显式地将当前本地范围传递给
eval
:

for pos_x in range(plt.xmin, plt.xmax):
for pos_y in range(plt.ymin, plt.ymax):
    x = pos_x-0.25
    y = pos_y-0.25
    x0 = eval(self.equation, None, locals())
    x += 0.5
    x1 = eval(self.equation, None, locals())
    y0 = eval(self.equation, None, locals())
    y += 0.5
    y1 = eval(self.equation, None, locals())

(可能)需要显式

None
,因为
eval
不接受关键字参数,并且
eval(self.equation, locals())
会导致
eval
使用本地命名空间作为全局命名空间。

© www.soinside.com 2019 - 2024. All rights reserved.