2013-06-06 3 views
0

Я пытаюсь вызвать функцию следующим образом:функция Python принимает N позиционных параметров, но M получили

for TestCase in sys.argv[1:]: 
    TestTree = ET.parse(TestCase) 
    Root = TestTree.getroot() 
    inputFile = Root[0].text 
    start_server(inputFile) 

def start_server (inputFile): 
    server_process = Process(target=HTTPServer.initServer, args=(inputFile)) 
    server_process.start() 

def initServer(self,inputFile): 
    print(inputFile) 

Однако, на выполнение этих строк, я получаю TraceBack со следующей ошибкой:

TypeError: initServer() takes 2 positional arguments but 182 were given 

Здесь inputFile - это простая HTML-страница HTML. Где я ошибаюсь и отправляю 182 аргумента?

+0

Вы копировали-вставляете это? это звучит, как будто он передан '* inputFile' или что-то – Elazar

+0

Я скопировал это из своего собственного кода. Однако он не был скопирован нигде. – darnir

+0

Ох. попробуйте передать 'args = (inputFile,)' – Elazar

ответ

3

По the docs:

args is the argument tuple for the target invocation

Так должно быть кортеж. Вы предоставили (inputFile) - эквивалентно простому inputFile. Это фактический файл, который является итерируемым. Process реализация, вероятно, делает target(*args), который распаковывает файл в свои строки.

Вы должны пройти args=(inputFile,), который является кортежем, содержащим один объект. поэтому *args будет inputFile, как и ожидалось.

Смежные вопросы