Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 运行带有参数的脚本似乎会导致递归错误_Python 3.x_Python Unittest - Fatal编程技术网

Python 3.x 运行带有参数的脚本似乎会导致递归错误

Python 3.x 运行带有参数的脚本似乎会导致递归错误,python-3.x,python-unittest,Python 3.x,Python Unittest,我正在和unittest一起做一个小项目 我可以运行测试,但如果我向命令行条目添加参数(例如:/myprogramm.py test,而不仅仅是/myprogramm.py),以便添加argparse层(argparse本身似乎不是问题的原因),则会出现递归错误 要复制的示例文件: #!/usr/bin/env python3

我正在和
unittest
一起做一个小项目

我可以运行测试,但如果我向命令行条目添加参数(例如:
/myprogramm.py test
,而不仅仅是
/myprogramm.py
),以便添加
argparse
层(argparse本身似乎不是问题的原因),则会出现
递归错误

要复制的示例文件:

#!/usr/bin/env python3                                                                                                

import argparse
import unittest

def foo():
    return True

class FooTestCase(unittest.TestCase):
    def test_foo(self):
        self.assertTrue(foo())

def test():
    unittest.main()

def main():
    foo()

def make_parser():
    parser = argparse.ArgumentParser(description='test or foo.')
    subparsers = parser.add_subparsers(dest='subcommand')
    subparsers.required = True
    subparsers.add_parser('test')
    subparsers.add_parser('foo')
    return parser

if __name__ == '__main__':
    parser = make_parser()
    args = parser.parse_args()
    if args.subcommand == 'test':
        test()
    elif args.subcommand == 'foo':
        main()
  File "./myprogramm.py", line 14, in test
    unittest.main()
  File "/usr/lib/python3.5/unittest/main.py", line 93, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python3.5/unittest/main.py", line 140, in parseArgs
    self.createTests()
  File "/usr/lib/python3.5/unittest/main.py", line 147, in createTests
    self.module)
  File "/usr/lib/python3.5/unittest/loader.py", line 219, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib/python3.5/unittest/loader.py", line 219, in <listcomp>
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib/python3.5/unittest/loader.py", line 204, in loadTestsFromName
    test = obj()
  File "./myprogramm.py", line 14, in test
    unittest.main()
  File "/usr/lib/python3.5/unittest/main.py", line 93, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python3.5/unittest/main.py", line 114, in parseArgs
    self._initArgParsers()
  File "/usr/lib/python3.5/unittest/main.py", line 150, in _initArgParsers
    parent_parser = self._getParentArgParser()
  File "/usr/lib/python3.5/unittest/main.py", line 155, in _getParentArgParser
    parser = argparse.ArgumentParser(add_help=False)
  File "/usr/lib/python3.5/argparse.py", line 1629, in __init__
    self._positionals = add_group(_('positional arguments'))
  File "/usr/lib/python3.5/gettext.py", line 514, in gettext
    return dgettext(_current_domain, message)
  File "/usr/lib/python3.5/gettext.py", line 478, in dgettext
    codeset=_localecodesets.get(domain))
  File "/usr/lib/python3.5/gettext.py", line 413, in translation
    mofiles = find(domain, localedir, languages, all=True)
  File "/usr/lib/python3.5/gettext.py", line 376, in find
    val = os.environ.get(envar)
  File "/usr/lib/python3.5/_collections_abc.py", line 595, in get
    return self[key]
RecursionError: maximum recursion depth exceeded
使用
/myprogramm.py foo
启动此程序是可行的,但如果我使用
/myprogramm.py test
启动它,则无法运行

带有递归错误的输出

#!/usr/bin/env python3                                                                                                

import argparse
import unittest

def foo():
    return True

class FooTestCase(unittest.TestCase):
    def test_foo(self):
        self.assertTrue(foo())

def test():
    unittest.main()

def main():
    foo()

def make_parser():
    parser = argparse.ArgumentParser(description='test or foo.')
    subparsers = parser.add_subparsers(dest='subcommand')
    subparsers.required = True
    subparsers.add_parser('test')
    subparsers.add_parser('foo')
    return parser

if __name__ == '__main__':
    parser = make_parser()
    args = parser.parse_args()
    if args.subcommand == 'test':
        test()
    elif args.subcommand == 'foo':
        main()
  File "./myprogramm.py", line 14, in test
    unittest.main()
  File "/usr/lib/python3.5/unittest/main.py", line 93, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python3.5/unittest/main.py", line 140, in parseArgs
    self.createTests()
  File "/usr/lib/python3.5/unittest/main.py", line 147, in createTests
    self.module)
  File "/usr/lib/python3.5/unittest/loader.py", line 219, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib/python3.5/unittest/loader.py", line 219, in <listcomp>
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib/python3.5/unittest/loader.py", line 204, in loadTestsFromName
    test = obj()
  File "./myprogramm.py", line 14, in test
    unittest.main()
  File "/usr/lib/python3.5/unittest/main.py", line 93, in __init__
    self.parseArgs(argv)
  File "/usr/lib/python3.5/unittest/main.py", line 114, in parseArgs
    self._initArgParsers()
  File "/usr/lib/python3.5/unittest/main.py", line 150, in _initArgParsers
    parent_parser = self._getParentArgParser()
  File "/usr/lib/python3.5/unittest/main.py", line 155, in _getParentArgParser
    parser = argparse.ArgumentParser(add_help=False)
  File "/usr/lib/python3.5/argparse.py", line 1629, in __init__
    self._positionals = add_group(_('positional arguments'))
  File "/usr/lib/python3.5/gettext.py", line 514, in gettext
    return dgettext(_current_domain, message)
  File "/usr/lib/python3.5/gettext.py", line 478, in dgettext
    codeset=_localecodesets.get(domain))
  File "/usr/lib/python3.5/gettext.py", line 413, in translation
    mofiles = find(domain, localedir, languages, all=True)
  File "/usr/lib/python3.5/gettext.py", line 376, in find
    val = os.environ.get(envar)
  File "/usr/lib/python3.5/_collections_abc.py", line 595, in get
    return self[key]
RecursionError: maximum recursion depth exceeded