我有一个全局字典变量,将在多次调用的函数中使用。我无法控制函数的调用时间,或者我正在编写的函数之外的范围。我只需要在未初始化变量时初始化变量。初始化后,我将为其添加值。
global dict
if dict is None:
dict = {}
dict[lldb.thread.GetThreadID()] = dict[lldb.thread.GetThreadID()] + 1
不幸的是,我得到了
**NameError: global name 'dict' is not defined**
我理解我应该定义变量,但是由于这个代码被多次调用,只需说dict = {}
我每次调用代码时都会重新定义变量,除非我能以某种方式检查是否它没有定义,只能定义它。
答案 0 :(得分:4)
捕获错误:
try:
_ = myDict
except NameError:
global myDict
myDict = {}
NOT 使用dict
或任何其他内置类型作为变量名称。
答案 1 :(得分:1)
更惯用的方法是将名称提前设置为sentinel值,然后检查:
_my_dict = None
...
def increment_thing():
global _my_dict
if _my_dict is None:
_my_dict = {}
thread_id = lldb.thread.GetThreadID()
_my_dict[thread_id] = _my_dict.get(thread_id, 0) + 1
注意,我对lldb
一无所知 - 但如果使用 python 线程,最好使用threading.local
:< / p>
import threading
# Thread local storage
_tls = threading.local()
def increment_thing():
counter = getattr(_tls, 'counter', 0)
_tls.counter = counter + 1