Python:有没有方法来检测方法调用中的missing()?

问题描述:

我想打电话给方法f(),但不小心我只是说f。 Python3会错误地对一个不存在的变量进行无意义的评估,因此会跳过我预期的方法调用而没有任何通知。有没有办法来覆盖这种默认行为并获取错误消息?通过禁止将标识符作为方法和变量双重使用,或者禁止只包含标识符的无意义陈述?Python:有没有方法来检测方法调用中的missing()?

+7

'F'指功能而不调用它,而不是“不存在的变量的意义评价”线。这就是为什么你没有得到'SyntaxError'。 Python不区分函数名和变量名 - 它们只是'globals()'字典中的键。 – Volatility 2013-04-04 09:43:46

+1

*“禁止将标识符作为方法和变量的双重使用”* - 在python中,method *是变量 – 2013-04-04 10:00:04

+1

@Joachim,你对发生的事情不太正确(读取@Volatility),但我理解你为什么要警告这一点。如果您习惯于编写Ruby,那么这是一个非常简单的错字。 – 2013-04-04 10:17:13

它是有效的语法,所以Python不会抱怨。你可能想考虑一些其他工具,如pylint。 pylint的会一直报道:

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

如果你压根儿:代替

f 

f() 

,唯一的缺点是pylint的可以投诉非常多开箱。确保创建一个容忍你的风格的配置。

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,因为函数本质上是变量。

+0

谢谢你的解释。仍然:一个包含函数名称'f'的语句_is_毫无意义,这几乎肯定是一个错误,我希望能够自动检测到它的方法。 – 2013-04-04 09:52:03

通常的方法来确保你的代码做它应该写的是unit tests。如果您有良好的测试覆盖率,这种类型的错误不会因此而下滑。

在Python中传递函数/方法的引用是非常常见的(也是有用的),所以它不是你应该禁用的东西。

+0

Zing。但是是真的。 – Joe 2013-04-04 09:50:39

唉,没有。 Python没有任何严格的警告模式(比较Perl和Ruby)。此外,这些线是有效的陈述,因此对它们发出警告是不公平的。

你可以编写自己的代码检查器来查找这些线条。搜索是没有任何标点符号一个字,而且是一个Python标识符(而不是作为break这样的关键字)