Почему я получаю 'NameError: free variable' ??? ' ссылка перед присвоением в ограждающей области? - PullRequest
1 голос
/ 03 марта 2020

Я писал простой код python на днях, используя 3D-слайсер (v4.11) и Python (v3.6.7) на Windows 10.

Исходный код ниже:

def RunCLI(self, module, params, onCompletedHandler):
    cliNode = slicer.cli.run(module, None, params)

    mask = cliNode.Cancelled | cliNode.Completed

    completed = False

    def OnStatusModified(caller, event):
        nonlocal completed

        if completed: return # Error

        status = cliNode.GetStatus() # Gives the same error for 'cliNode' if I comment the previuos line

        if status & mask != 0:
            completed = True
            onCompletedHandler()

    cliNode.AddObserver('ModifiedEvent', OnStatusModified)
    OnStatusModified(None, None)

Иногда он выдает ошибку:

'NameError: свободная переменная' завершена ', на которую ссылается перед присваиванием в пределах объема ".

Понятия не имею, почему это происходит и почему иногда это проходит, а иногда и не удается.

Я не уверен, что является внутренней реализацией cliNode (я не думаю, что это имеет значение ) но я предполагаю, что cliNode запускает исполняемый файл в другом потоке и сигнализирует об изменении статуса через 'ModifiedEvent'.

Благодарим вас за помощь.

...