よく変数が定義されてなくて文法エラーが起きることもあると思う
それはだいたいif文の分岐によっては定義されない変数が出てくることで起きることが多いと思う
そういうときの書き方をこちらに残しておきます
使う関数
globals()
locals()
globals(),locals()で定義済みの変数情報を取得できる
サンプルソースコード
以下のように書くと定義済ローカル変数かどうかチェックができます
test_blank = ''
global_variable = globals()
print(global_variable)
# 定義済みの変数の存在チェック
if 'test_blank' in locals():
print('test_blank ok')
else:
print('test_blank bad')
# 定義済みの変数の存在チェックとNoneかどうか
if 'test_nothing' in locals() and test_nothing is not None:
print('test_nothing ok')
else:
print('test_nothing bad')
以下のように書くと定義済グローバル変数かどうかチェックができます
test_blank = ''
global_variable = globals()
print(global_variable)
# 定義済みの変数の存在チェック
if 'test_blank' in globals():
print('test_blank ok')
else:
print('test_blank bad')
# 定義済みの変数の存在チェックとNoneかどうか
if 'test_nothing' in globals() and test_nothing is not None:
print('test_nothing ok')
else:
print('test_nothing bad')
出力結果(globalsのみ)
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x14acc6454280>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'Main.py', '__cached__': None, 'test_blank': '', 'global_variable': {...}}
test_blank ok
test_nothing bad
解説
globals(),locals()で定義済みの変数情報を取得できる
その中にチェックしたい変数があるかをチェックしている
またNoneである変数かどうかもチェックしている
サンプルプログラムだと定義済変数としてtest_blankを定義している
最後のほうではtest_nothingという変数のチェックをしているが変数が定義されていないため未定義として判定されている
コメント