2016-07-27 6 views
1

私はpython2.7でウィンドウを使用しています。私のプログラムはとても簡単です。コマンドラインで入力し、 '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() 

そして使用してそれを実行している:

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()は、コマンドから実行するテストのリストを取得します:私はこのエラーを取得しています

>>python test.py 5 

をライン。したがって、あなたのモジュールに5という名前のテストを見つけようとしていますが、そのようなテストがないので失敗します。あなたがunittest.main()に独自argv値を渡すことができ、問題を回避するには

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

これは、スクリプトファイル名でのみ最初の引数を渡します。ただし、コマンドラインでテスト名を渡したい場合は、unittest.main()の機能をいくつか破ります。

+0

うわー...それは働いた...ありがとう:) –

関連する問題