2011-08-01 22 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)   
あなたがそうでなければ、あなたが魅力のように globals()

+0

作品を使用することができ、あなたがlocals()を使用することができますローカルスコープ内の変数の存在をチェックする必要があります! :) – Marko

+0

@マルコ - ありがとう)それが役に立つと願って –

2
>>> f = 1 
>>> globals() 
{'__builtins__': <module 'builtins' (built-in)>, '__name__': '__main__', 'f': 1, '__doc__': None, '__package__': None} 
>>> 'f' in globals() 
True 
関連する問題