2016-07-27 63 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

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