2014-09-03 2 views
2

Это будет работать нормально:Как сказать «если var:», даже если «var» вообще не существует?

a = 1 
if a: 
    b = a 

, но это не будет работать:

if a: 
    b = a 

это не нравится «если» оператор будет выполняться при условии, что мы явно говорят ..

"if a exists" 

так почему это ошибка? если он не существует, просто ничего не делайте в параметрах этого оператора if.

UPDATE

получается «если» означает .. «если значение для» означает в питона.

я ищу эквивалентности для «если вообще существует, то двигаться вперед»

+3

Вы не ** говорите «если' a' существует ». Вы спрашиваете, истинны ли значения 'a' true или false *. Имена ссылаются на объекты, объекты имеют логическое значение. –

+1

Зачем вам нужно знать, определено ли имя? Звучит так, как будто вы хотите вместо этого сделать a = None. –

+0

Используйте значение None или другое значение в качестве вашего значения «не установлено». – daveydave400

ответ

7

Вы можете использовать locals():

if 'a' in locals(): 
    # variable 'a' is defined 

Вы можете также использовать принцип Python, что легче просить прощения чем разрешение:

try: 
    b 
    # if we get here, variable 'b' is defined 
except NameError: 
    # variable 'b' is not defined 

Как уже упоминалось в the documentation:

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

3

Когда имя не существует (не обязано, поэтому нет никаких заданий связывания значения для него, не import заявлений не существуют, что назначить импортированный объект на имя и никаких аргументов функции существуют), то Python генерирует исключение.

Вы можете обработать это исключение; глобальное имя выбрасывает NameError, местное имя выбрасывает UnboundLocalError. Ловля исключения с try...except заявления также может сказать вам, если исключение не было брошено:

try: 
    somename 
except NameError: 
    # name does not exist 
else: 
    # name exists 

Смотрите Execution model documentation на то, что делает имя существует или нет.

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