Как проверить, была ли переменная инициализирована перед ее использованием? - PullRequest
4 голосов
/ 20 февраля 2010

Итак, допустим, у вас есть приложение с переменной, для которой вы будете создавать экземпляр, когда вы загружаете его независимо (т.е. когда вы используете if __name__ == '__main__').

Также существует метод, который нужно вызывать, когда клиент импортирует приложение для использования в другом приложении. Этот метод также создает экземпляр этой переменной.

То, что я хочу сделать, это проверить, была ли создана переменная, перед ее определением (поэтому мне не нужно дважды создавать объект). Моя интуиция сказала мне использовать if SOME_VARIABLE is not None: #instantiate here, но это выдает ошибку

локальная переменная 'SOME_VARIABLE' ссылка перед присвоением

Что дает?

Ответы [ 2 ]

14 голосов
/ 20 февраля 2010

Ошибка доступа к переменной до ее инициализации. Значение неинициализированной переменной не None; доступ к нему только вызывает исключение.

Вы можете поймать исключение, если хотите:

>>> try:
...    foo = x
... except NameError:
...    x = 5
...    foo = 1

В классе вы можете указать значение по умолчанию None и проверить, изменилось ли оно в конкретном экземпляре (при условии, что None не является допустимым значением для этой конкретной переменной):

class Foo(object):
    bar = None
    def foo(self):
        if self.bar is None:
            self.bar = 5
        return self.bar
3 голосов
/ 20 февраля 2010

Вы можете попробовать if 'varname' in locals() (вам, вероятно, также нужно проверить globals() и, возможно, некоторые другие места), или просто прочитать из переменной и перехватить исключение NameError, которое будет выброшено, когда его не существует .

Но если вы просто хотите использовать другой случай if __name__ == '__main__', почему бы просто не сделать:

if __name__ == '__main__'
    myvar = 'as_main'
else:
    myvar = 'as_import'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...