Pythonで変数が定義されているかどうかを判定する
Pythonのglobals()
はグローバルなシンボルテーブル(グローバル変数)を、locals()
はローカルなシンボルテーブル(ローカル変数)を返します。
これらを使って、変数が定義済みかどうかを判定できます。
各変数の定義位置の確認
global_var1 = 1000
def print_variable():
local_var1 = 0
print(globals())
print(locals())
#;
if __name__ == "__main__":
main_var1 = 10
print_variable()
出力
{ ..., 'global_var1': 1000, ..., 'main_var1': 10 }
{ 'local_var1': 0 }
“__main__”
の中もグローバル扱いになる。変数が定義されているかどうかを判定する方法
変数名を文字列で指定し、in
演算子で確認します。
def check_variable():
local_var1 = 0
if 'local_var1' in globals():
print('local_var1 in globals')
if 'local_var2' in globals():
print('local_var2 in globals')
if 'local_var1' in locals():
print('local_var1 in locals')
if 'local_var2' in locals():
print('local_var2 in locals')
if 'global_var1' in globals():
print('global_var1 in globals')
if 'main_var1' in globals():
print('main_var1 in globals')
if 'global_var1' in locals():
print('global_var1 in locals')
if 'main_var1' in locals():
print('main_var1 in locals')
#;
global_var1 = 1000
if __name__ == "__main__":
main_var1 = 10
check_variable()
if 'main_var1' in globals():
print('[__main__] main_var1 in globals')
if 'main_var1' in locals():
print('[__main__] main_var1 in locals')
if 'global_var1' in globals():
print('[__main__] global_var1 in globals')
if 'global_var1' in locals():
print('[__main__] global_var1 in locals')
if 'local_var1' in globals():
print('[__main__] local_var1 in globals')
if 'local_var1' in locals():
print('[__main__] local_var1 in locals')
#;
出力
local_var1 in locals
global_var1 in globals
main_var1 in globals
[__main__] main_var1 in globals
[__main__] main_var1 in locals
[__main__] global_var1 in globals
[__main__] global_var1 in locals
global_var1
やmain_var1
は”__main__”
の中では、グローバルでも、ローカルでも判定できる。