问题描述
|
(注意:我是Python的新手)
我在函数调用中遇到了错字,并且构建了项目,但是在用错字打到函数调用时在运行时崩溃了。
这正常吗?构建不应该失败吗?我设置正确吗?
我正在Linux Centos上使用Eclipse。
Eclipse确实会检测其他错误(缩进,未定义的变量(即,如果foo :,而从未声明过foo则导致构建错误,等等)
这是我的东西的样子:
def foo(self):
pass
def bar(self):
foe()
->foe
而不是foo
->不会产生编译错误,但是(当然)在运行时崩溃
我可以理解,Python有时在运行时之前不知道变量的类型,但是当我调用该类中甚至不存在的函数时,它无法检测到它?
我希望我的设置有很大的问题,否则,我恐怕会错过Java,C和所有其他静态类型的语言;))))
解决方法
实际上,PyLint会检测到该错误,因此,如果您使用的是带有PyDev插件的Eclipse,它将用
foe()
标记为错误。
PyDev当前可以找到:
未定义的变量
导入中未定义的变量
未使用的变量
未使用的进口
未使用的野生进口
签名重复
导入重新定义
未解决的进口
没有在类方法中声明\ self令牌
缩进与制表符和空格混合
缩进错误(缩进时空格数量不正确)。
,不,它无法检测到。
它是动态的和解释性的。实际上,您可以在运行时将函数添加到类中-或导入模块-这样就无法轻松检测到该函数是否存在。
,Python不是用C来“构建”的。可以在Python中动态创建函数。将def foo():
视为在函数表中添加条目an2ѭ。调用函数时,Python在表中查找该函数名称。如果不存在,则会出现运行时错误。这是设计使然。您仍然会收到错误消息,尽管实际上是在调用未知函数时才会出现。
,在运行程序之前,Python不会编译。因此,很难谈论“编译时”。
,您必须使用第三方工具来检查所谓的编译错误。查看此问题(和答案)以及PyChecker或PyLint。