(注意:我是Python的新手)
我在函数调用中输入了一个拼写错误,并且在使用拼写错误进行函数调用时,在运行时崩溃了该项目。
这是正常的吗?!构建不应该失败吗?!我设置正确吗?!
我在Linux Centos上使用Eclipse。
Eclipse确实检测到其他错误(缩进,未定义的变量(例如,如果foo:,foo之前从未声明过,导致构建错误等)。
这是我的东西的样子:
def foo(self):
pass
def bar(self):
foe()
- > foe
代替foo
- >不会生成编译错误,但(当然)在运行时崩溃
我可以理解Python有时在运行时之前不知道变量的类型,但是当我调用一个甚至不存在于类中的函数时,它无法检测到它?!!
我希望我的设置有问题,否则,我恐怕会错过Java,C和我所有其他静态类型的语言;))))
答案 0 :(得分:7)
实际上 PyLint 会检测到这一点,所以如果您使用带有PyDev插件的Eclipse,它会将foe()
标记为错误。
- 未定义的变量
- 来自导入的未定义变量
- 未使用的变量
- 未使用的导入
- 未使用的野生进口
- 重复签名
- 导入重新定义
- 未解决的导入
- 在类方法中声明没有'自我'标记
- 将缩进与标签和空格混合
- 缩进不良(缩进时空格数不正确)。
答案 1 :(得分:2)
不,它无法检测到。
它是动态的和解释的。实际上,您可以在运行时向类添加函数 - 或导入模块 - 因此无法轻松检测函数是否存在。
答案 2 :(得分:2)
Python不像C那样“构建”,就像C一样。可以在Python中动态创建函数。将def foo():
视为在函数表中添加条目foo
。当您调用函数时,Python会在表中查找该函数名称。如果它不存在,则会出现运行时错误。这是设计的。你仍然会收到错误消息,尽管它们将在实际调用未知函数时出现。
答案 3 :(得分:0)
在运行程序之前,Python不会编译。所以很难谈论“编译时”。
答案 4 :(得分:0)
您必须使用第三方工具来检查所谓的编译错误。请查看此question (and answers)和PyChecker或PyLint。