Как я могу проверить, существует ли переменная? - PullRequest
1 голос
/ 01 августа 2011

Я хочу проверить, существуют ли переменные с именем component + "_STATUS" или + "_DESC".

Я попробовал следующее, но это не сработает. Итак, вот мой код:

Components = ['SAVE_DOCUMENT', \
'GET_DOCUMENT', \
'DVK_SEND', \
'DVK_RECEIVE', \
'GET_USER_INFO', \
'NOTIFICATIONS', \
'ERROR_LOG', \
'SUMMARY_STATUS']

for Component in Components:
    try:
        eval(Component + "_STATUS")
        eval(Component + "_DESC")
    except NameError:
        print "Missing component " + Component + " information!"
        sys.exit(StateUnknown)

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Я могу ошибаться, но я думаю, что вы можете сделать это следующим образом (без usign eval - потому что это не очень хорошо использовать):

Components = ['SAVE_DOCUMENT', 'GET_DOCUMENT', 'DVK_SEND', 'DVK_RECEIVE', 'GET_USER_INFO', 'NOTIFICATIONS', 'ERROR_LOG', 'SUMMARY_STATUS']
missed = [x for x in Components if x + "_STATUS" not in locals() or x + "_DESC" not in locals()]
if missed:
    print "Missing components: {0:}".format(missed)
    sys.exit(StateUnknown)        

Если вам нужно проверить наличие переменной в локальной области, вы можете использовать locals () , в противном случае вы можете использовать globals ()

2 голосов
/ 01 августа 2011
>>> f = 1
>>> globals()
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'f': 1, '__doc__': None, '__package__': None}
>>> 'f' in globals()
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...