оператор python - del выполняется рано - PullRequest
3 голосов
/ 29 февраля 2012

Я программист-самоучка без формального обучения, поэтому, пожалуйста, простите меня заранее, если это глупый вопрос.

При программировании на Python я обнаружил нечто странное:

from someModule import someClass

def someFunction():
    someInstance = someClass()
    print "foo"
    del someClass

someFunction()

Это немедленно умирает с несвязанной ошибкой локальной переменной:

UnboundLocalError: local variable 'someClass' referenced before assignment

Комментирование оператора delete решает проблему:

...
    #del someClass
...

и возвращается:

foo

Итак, 2 вопроса:

1) оператор del находится в конце функции. Почему он вызывается перед битами в начале?

2) Почему выдается ошибка «несвязанная локальная переменная»? Разве это не должна быть ошибка "unbound global variable"?

1 Ответ

8 голосов
/ 29 февраля 2012

Оператор del неявно отображает имя someClass local для всей функции, поэтому строка

someInstance = someClass()

пытается найти локальное имя someClass, которое не определено в этой точке. Оператор del не выполняется раньше - имя не определено с самого начала.

Если вы действительно хотите сделать что-то подобное (подсказка: нет), вы должны объявить имя global:

def someFunction():
    global someClass
    ...
    del someClass
...