我会尽力描述我遇到的问题。我正在构建一个基于多个类并使用 unittest 框架的 Python 程序。简而言之,Main.py 文件有一个“ValidateDriver”类,它将“驱动程序”变量定义为 ElementTree 类型。如果我将它直接指向我需要解析的 XML 文件(即 driver = ElementTree.parse(rC:\test.xml)),那么我可以从另一个类访问它。但是,实际上,在您访问 ValidateDriver 类中的 Main 函数之前,我没有从命令行传入的实际 XML 文件。因此,在 ValidateDriver 类下,驱动程序实际上是 driver = ElementTree,然后在主函数中,我将该变量重新分配给 ValidateDriver.driver = ElementTree.parse(args.driver)。然而,这就是症结所在。当我去其他类并尝试调用 ValidateDriver.driver 时,我没有可用的“findall”方法/属性。同样,它唯一可行的方法是执行以下操作:ElementTree.parse(rC:\test.xml))。如果我在 C# 中执行此操作,它会起作用,但我是 Python 新手,这让我很生气。任何帮助/建议表示赞赏。我已经包含了这两个类的代码。
主功能:
import sys
import argparse
import xml.etree.ElementTree as ElementTree
import unittest
import Tests.TestManufacturer
class ValidateDriver:
driver = ElementTree
def main(argv):
parser = argparse.ArgumentParser(description='Validation.')
parser.add_argument('-d', '--driver', help='Path and file name xml file', required=True)
parser.add_argument('-v', '--verbosity',
help='Verbosity for test output. 1 for terse, 2 for verbose. Default is verbose',
default=2, type=int)
#args = parser.parse_args()
args = r'C:\test.c4i'
#print ("Validate Driver: %s" % args.driver)
#print ("Verbosity Level: %s" % args.verbosity)
ValidateDriver.driver = ElementTree.parse(r'C:\test.c4i')
loader = unittest.TestLoader()
suite = loader.loadTestsFromModule(Tests.TestManufacturer)
runner = unittest.TextTestRunner(verbosity=2) # TODO Remove this...
# TODO Uncomment this...
runner = unittest.TextTestRunner(verbosity=args.verbosity)
result = runner.run(suite)
if __name__ == "__main__":
main(sys.argv[1:])
其他类,测试厂商:
import unittest
import Main
manufacturer = ['']
class Tests(unittest.TestCase):
# Test to see if Manufacturer exists.
def test_manufacturer_exists(self):
for m in Main.ValidateDriver.driver.findall('./manufacturer'):
print m.text
产生以下错误:
C:\Python27\python.exe C:\Users\test\PycharmProjects\Validator\Main.py
Traceback (most recent call last):
File "C:\Users\test\PycharmProjects\Validator\Main.py", line 22, in <module>
class ValidateDriver:
File "C:\Users\test\PycharmProjects\Validator\Main.py", line 65, in ValidateDriver
main(sys.argv[1:])
File "C:\Users\test\PycharmProjects\Validator\Main.py", line 36, in main
ValidateDriver.driver = ElementTree.parse(r'C:\test.c4i')
NameError: global name 'ValidateDriver' is not defined
Process finished with exit code 1