2010-02-20 2 views
2

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

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

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

локальная переменная «SOME_VARIABLE» обращаться до присвоения

Что это дает?

ответ

11

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

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

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

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

class Foo(object): 
    bar = None 
    def foo(self): 
     if self.bar is None: 
      self.bar = 5 
     return self.bar 
3

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

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

if __name__ == '__main__' 
    myvar = 'as_main' 
else: 
    myvar = 'as_import' 
Смежные вопросы