我有一个全局字典变量,它将用于多次调用的函数中。我无法控制何时调用函数,也无法控制我正在编写的函数之外的范围。 只有在变量未初始化的情况下,我才需要初始化变量。 初始化后,我将向其添加值。
global dict
if dict is None:
dict = {}
dict[lldb.thread.GetThreadID()] = dict[lldb.thread.GetThreadID()] + 1
不幸的是,我得到了
NameError: global name 'dict' is not defined
我知道我应该定义变量,但由于这段代码被多次调用,只要说dict = {}
我每次调用代码时都会重新定义变量,除非我可以以某种方式检查它是否未定义,然后才定义它。
捕获错误:
try:
_ = myDict
except NameError:
global myDict
myDict = {}
重要提示:
不要使用 dict
或任何其他内置类型作为变量名。
一种更惯用的方法是提前将名称设置为哨兵值,然后检查该值:
_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
:
import threading
# Thread local storage
_tls = threading.local()
def increment_thing():
counter = getattr(_tls, 'counter', 0)
_tls.counter = counter + 1