4

我想调用一个方法f(),但一不小心我就说了f。Python3 将其误认为是对不存在的变量进行了无意义的评估,因此在没有任何通知的情况下跳过了我想要的方法调用。有没有办法覆盖此默认行为并获取错误消息?是通过禁止标识符作为方法和变量的双重使用,还是通过禁止仅由标识符组成的无意义语句?

4

4 回答 4

5

这是有效的语法,所以 Python 不会抱怨。您可能需要考虑其他一些工具,例如 pylint。Pylint 会报告:

W:  4,0: Statement seems to have no effect

如果您只是这样做:

f

代替:

f()

唯一的问题是 pylint 可以开箱即用地抱怨很多。确保创建一个兼容您的风格的配置。

于 2013-04-04T09:56:34.713 回答
3
In [1]: def f():
   ...:     print("This is some random function")
   ...:     return

In [2]: a = f

In [3]: a()
This is some random function

In [4]: somedict = {"call_something": f, "call_another": a}

In [5]: somedict["call_something"]()
This is some random function

In [6]: f
Out[6]: <function __main__.f>

使用函数而不调用它是完全有效的语法,并且正如我刚刚展示的那样具有多种用途。不是a meaningless evaluation of a nonexisting variable,因为函数本质上是变量。

于 2013-04-04T09:47:06.260 回答
1

确保您的代码执行应有的功能的常用方法是编写单元测试。如果您有良好的测试覆盖率,这种类型的错误就不会溜走。

传递对函数/方法的引用在 Python 中很常见(并且很有用),因此您不应该禁用它。

于 2013-04-04T09:49:38.250 回答
0

唉,没有。Python 没有任何严格的警告模式(参见 Perl 和 Ruby)。此外,这些行是有效的陈述,因此警告它们是不公平的。

不过,您可以编写自己的代码检查器来查找这样的行。搜索没有任何标点符号的单个单词并且是 Python 标识符(不是关键字,例如break)的行

于 2013-04-04T10:08:37.730 回答