即使代码中有拼写错误,Python也可以构建好吗?

时间:2011-05-26 15:05:53

标签: python eclipse

(注意:我是Python的新手)

我在函数调用中输入了一个拼写错误,并且在使用拼写错误进行函数调用时,在运行时崩溃了该项目。

这是正常的吗?!构建不应该失败吗?!我设置正确吗?!

我在Linux Centos上使用Eclipse。

Eclipse确实检测到其他错误(缩进,未定义的变量(例如,如果foo:,foo之前从未声明过,导致构建错误等)。

这是我的东西的样子:

def foo(self):
   pass

def bar(self):
   foe() 

- > foe代替foo - >不会生成编译错误,但(当然)在运行时崩溃

我可以理解Python有时在运行时之前不知道变量的类型,但是当我调用一个甚至不存在于类中的函数时,它无法检测到它?!!

我希望我的设置有问题,否则,我恐怕会错过Java,C和我所有其他静态类型的语言;))))

5 个答案:

答案 0 :(得分:7)

实际上 PyLint 会检测到这一点,所以如果您使用带有PyDev插件的Eclipse,它会将foe()标记为错误。

  

PyDev can currently find

     
      
  • 未定义的变量
  •   
  • 来自导入的未定义变量
  •   
  • 未使用的变量
  •   
  • 未使用的导入
  •   
  • 未使用的野生进口
  •   
  • 重复签名
  •   
  • 导入重新定义
  •   
  • 未解决的导入
  •   
  • 在类方法中声明没有'自我'标记
  •   
  • 将缩进与标签和空格混合
  •   
  • 缩进不良(缩进时空格数不正确)。
  •   

Screenshot of the OP's code parsed by PyLint in PyDev

答案 1 :(得分:2)

不,它无法检测到。

它是动态的和解释的。实际上,您可以在运行时向类添加函数 - 或导入模块 - 因此无法轻松检测函数是否存在。

答案 2 :(得分:2)

Python不像C那样“构建”,就像C一样。可以在Python中动态创建函数。将def foo():视为在函数表中添加条目foo。当您调用函数时,Python会在表中查找该函数名称。如果它不存在,则会出现运行时错误。这是设计的。你仍然会收到错误消息,尽管它们将在实际调用未知函数时出现。

答案 3 :(得分:0)

在运行程序之前,Python不会编译。所以很难谈论“编译时”。

答案 4 :(得分:0)

您必须使用第三方工具来检查所谓的编译错误。请查看此question (and answers)PyCheckerPyLint