2011-08-01 121 views
1

我想检查名为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) 

回答

4

我可能是错的,但我认为你可以做到这一点通过以下方式(不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()

+0

就像一个魅力! :) – Marko

+0

@Marko - 谢谢你)希望这会有所帮助 –

2
>>> f = 1 
>>> globals() 
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'f': 1, '__doc__': None, '__package__': None} 
>>> 'f' in globals() 
True 
相关问题