You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过exec()赋值的变量如何添加Type Hinting类型标注

解决方案

有两种常用的可行方案可以解决静态类型检测的问题:

  • 方案1:提前显式声明变量类型
    直接在exec代码执行前,先对变量做类型标注,静态类型检测工具会优先识别提前声明的类型信息,无需再加# type: ignore注释。
from your_module import SomeClass

# 提前声明变量类型
someClassInstance: SomeClass

exec(
    "someClassInstance = someMapper({someInfo})".format(someInfo=someInfo),
    globals(),
)

# 无需忽略类型检测,pyright可正常识别类型
someVar = someClassInstance.someMethod()

该方案适合你确定exec一定会正常给变量赋值、不会出现变量未定义的场景。如果你需要标注为基类类型,直接把标注里的SomeClass替换为对应基类即可。

  • 方案2:带默认值的可选类型标注
    如果你无法保证exec一定能成功赋值,担心出现运行时未绑定变量的错误,可以给变量一个初始的None值,搭配Optional类型标注:
from typing import Optional
from your_module import SomeClass

# 声明为可选类型,初始值设为None
someClassInstance: Optional[SomeClass] = None

exec(
    "someClassInstance = someMapper({someInfo})".format(someInfo=someInfo),
    globals(),
)

# 使用前先做非空判断,类型检测可正常通过
if someClassInstance is not None:
    someVar = someClassInstance.someMethod()

如果业务场景允许,更推荐你避免使用exec动态生成变量,可以用字典存储动态生成的实例,标注字典的value类型即可,代码可读性会更高:

from your_module import SomeClass

instances: dict[str, SomeClass] = {}
instances["someClassInstance"] = someMapper(someInfo)
someVar = instances["someClassInstance"].someMethod()

内容的提问来源于stack exchange,提问作者Mohsen Banan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:45:02