运行nosetests时获取TypeError():test_if_module_exists()

时间:2013-08-22 08:43:47

标签: python nose nosetests

更新:如果我改变

from scitools.std import *

到例如。

from scitools.std import sqrt, zeros

一切正常..

我正在尝试运行nosestests -s myfile.py,但我一直都会遇到这个错误:

======================================================================
ERROR: Test if modulename can be imported, and if not, write
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/usr/local/lib/python2.7/dist-packages/nose/util.py", line 613, in newfunc
    return func(*arg, **kw)
TypeError: test_if_module_exists() takes at least 1 argument (0 given)

方案:

from scitools.std import *
import nose.tools as nt

def test_test():

    diff = 1E-6
    nt.assert_almost_equal(diff, 0, delta=1E-5)

def main():
    print __name__

if __name__ == "__main__":
    main()

我正在运行Nose 1.3.0。已经在互联网上搜索过解决方案,找不到东西!

谢谢你们!

1 个答案:

答案 0 :(得分:1)

因为你正在使用通配符导入... 不要使用通配符!

基本上当你说

from scitools.stf import *

您还要导入以下所有内容:

  • scitools.easyviz
  • scitools.basics

鼻子的工作方式是它在模块中查找名为test_的所有函数。这包括您编写的每个函数以及您导入的每个函数。这称为Duck typing。因此,如果有一个函数你不想让鼻子试图运行,不要导入它。当您使用通配符导入时,您正在导入所有内容,这就是为什么使用通配符不是一个好主意的原因。只需导入您需要的功能,例如

from scitools.std import sqrt, zeros