在python中获取命令行参数时出错

时间:2016-07-27 03:53:51

标签: python

我正在使用带有python2.7的窗口。我的程序很简单。通过命令行输入并检查它是否为“5”。

代码:

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'

1 个答案:

答案 0 :(得分:3)

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

要解决此问题,您可以将自己的argv值传递给unittest.main()

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

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