2016-07-27 27 views
1

我正在使用python2.7的windows。我的程序很简单。通过命令行输入并检查它是否为'5'。在python中获取命令行参数时出错

代码:

import unittest 
import sys 

a=sys.argv[1] 

print a 

class TestCase(unittest.TestCase): 
    """My tests""" 

    def test_is_number_is_five(self): 
     self.assertEqual('5',a) 

if __name__ == '__main__': 
    unittest.main() 

而且使用的是运行它:

>>python test.py 5 

我收到此错误:

Traceback (most recent call last): 
    File "C:\Python27\lib\unittest\main.py", line 94, in __init__ 
    self.parseArgs(argv) 
    File "C:\Python27\lib\unittest\main.py", line 149, in parseArgs 
    self.createTests() 
    File "C:\Python27\lib\unittest\main.py", line 158, in createTests 
    self.module) 
    File "C:\Python27\lib\unittest\loader.py", line 130, in loadTestsFromNames 
    suites = [self.loadTestsFromName(name, module) for name in names] 
    File "C:\Python27\lib\unittest\loader.py", line 100, in loadTestsFromName 
    parent, obj = obj, getattr(obj, part) 
AttributeError: 'module' object has no attribute '5' 

回答

3

unittest.main()将获得的测试列表,从命令运行线。因此它试图在您的模块中找到一个名为5的测试,但因为没有这样的测试而失败。

要解决这个问题,你可以通过自己的argvunittest.main()

if __name__ == '__main__': 
    unittest.main(argv=sys.argv[:1]) 

这仅通过第一个参数,它是脚本文件名。但是,如果您想在命令行上传递测试名称,它会破坏unittest.main()的某些功能。

+0

哇...它的工作......非常感谢:) –