如何表示不能赋值的变量的类型?
您需要确认在yield 中发送的最后一个命令。
import asyncio
class Cmd1():
value = 1
q = asyncio.Queue()
q.put_nowait(Cmd1())
q.put_nowait(Cmd1())
def ack(cmd):
print(cmd)
async def gena():
cmd = None
try:
while True:
cmd = await q.get()
print(cmd)
yield cmd.value
finally:
if cmd :
ack(cmd)
async def main():
async for cmd in gena():
break
asyncio.run(main())
如果您这样做,cmd: Cmd1|None = None
它会以红色突出显示cmd.value
。如果cmd: Cmd1
那样我就不能分配 None 。
"value" is not a known member of "None" Pylance report OptionalMemberAccess
如何指定cmd类型以便测试通过而不使运行时复杂化?
或者如何重写这个结构?
目前是这样的:
async def gena():
cmd = None # type: ignore
try:
while True:
cmd : Cmd1 = await q.get()
print(cmd)
yield cmd.value
finally:
if cmd :
ack(cmd)
遗憾的是你没有写你有什么IDE,用红色突出显示。
我的 pycharm 没有突出显示任何内容,所以我不能肯定地说。
但我认为这个解决方案应该有效:
当然,前提是
q
您确实只能拥有严格类型的对象Cmd1
。为了避免在 cmd 重新定义时发誓,你可以这样做: