gpt4 book ai didi

python - 'thread._local' 对象没有属性

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:30 40 4
gpt4 key购买 nike

我试图通过添加上下文过滤器来更改日志记录格式。我的格式是这样的

FORMAT = "%(asctime)s %(VAL)s %(message)s"

这是我用来设置格式中的 VAL 的类。

class TEST:
def __init__(self, val):
self.test_var=threading.local()
self.test_var.value=val
def filter(self,record):
record.VAL=self.test_var.value
return True
def setValue(self,val)
self.test_var.value=CMDID

它在单线程环境下工作正常,但对于某个多线程环境我得到错误

<Fault 1: "exceptions.AttributeError:'thread._local' object has no attribute 'value'">

谁能告诉我这里出了什么问题??以及如何整改?

最佳答案

好吧,异常告诉您从 threading.local() 返回的 thread._local 对象没有您可以将 val 分配给的属性。您可以通过在 self.test_var=threading.local() 行之后添加 dir(self.test_var) 来确认这一点。这为我返回了这个:

['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__',
'__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__str__']

事实上,help(threading.local()) 将向您展示确实存在的方法和属性 - value 不在其中。

如果您正在尝试添加 一个新属性,那么您可能想要:

self.test_var.__setattr__('value',val)

这实际上会创建属性并为其分配值。

实例属性通常不是简单地通过分配给它们来创建的,就像非实例变量是......

关于python - 'thread._local' 对象没有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640679/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com