在 Python 中使用 eval() 时如何避免对未使用的局部变量发出警告

How to avoid warning on unused local variable when using eval() in Python

我有一个函数可以接受输入参数来求解或将表达式作为输出打印到文本文件中。

在函数本身中,我有很多分配的局部变量要在表达式中使用,并使用 eval() 来求解表达式。所有表达式都以字符串格式给出。这样做的原因是为了避免输入复杂的表达式两次(求解并作为输出打印)

是否有更好的方法来实现这一点,以避免对所有分配的变量发出 "local variable is assigned to but never used" 警告?

谢谢。

Python 没有给你这个警告;一些 linter 或其他静态分析器是,因为你正在做一些不寻常的事情。

现在,您知道您正在做一些您的静态分析器不理解并且会抱怨的不寻常的事情。如果您知道这一点,但仍想这样做,那么正确的做法是告诉分析器跳过该代码,或跳过对其的某些检查。

当然,每个分析器都有自己的方法,如果您不告诉我们您使用的是哪一个,甚至不提供完整的信息以便我们至少可以搜索或猜测,就无法分辨你想要什么修复。但是如果你浏览一下你正在使用的文档,应该很容易找到。

举个例子,如果您使用 flake8 作为 pyflakes 的包装,并且警告是 pyflakes F841,您可以添加 # noqa: F841 评论违规行以消除警告。如果您觉得不够明显,还可以添加一条注释,说明您的变量看似未使用但实际上正在 eval; 中使用;这应该足以让 reader(甚至是你,六个月后,当你完全忘记这段代码但必须调试它时)像 flake8.[=22= 一样快乐]


另一种方法是使用代表方程式的对象,它知道如何将自身表示为字符串,如何计算给定变量值的值,以及如何在使用时构建新对象数学运算符。

有一个很棒的库,叫做 SymPy,它可以完成所有这些甚至更多。您需要稍微重新组织一下代码才能使其正常工作,将 xy 定义为 SymPy 变量,并通过传递这些变量的替代值来对方程式进行数值评估,而不是使它们正常 Python 数字。但如果这符合您的要求,使用 SymPy 方程式可能比使用字符串更好。

它也会让你的 linter 开心,因为你现在正在用 x + y 之类的东西构建方程式,它显然使用变量,而不是像 'x + y'[=19= 这样的字符串]评估`.