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

函数声明返回str却提示返回Any类型,如何让类型检查工具识别正确类型?

问题:类型检查工具无法识别函数返回值为str类型

我编写了一个读取version.py并返回版本值的函数write_ini,函数声明返回str类型,但一直收到错误提示:「Returning Any from function declared to return "str"」,尽管VERSION["VERSION"]实际是字符串类型。

函数write_ini代码:

def write_ini() -> str:
    """Write version.ini file by extracting version from version.py."""
    # get root dirname
    filepath = realpath(__file__)
    root = dirname(dirname(dirname(filepath)))
    VERSION: Dict = {}

    # Extract version from version.py
    with open(op.join(root, "package_folder", "version.py"), encoding="utf8") as version_file:
        exec(version_file.read(), VERSION)
    print(VERSION["VERSION"])
    config["VERSION"] = {"cv_version": "v{}".format(VERSION["VERSION"])}

    # write to version.ini
    with open("version.ini", "w") as configfile:
        config.write(configfile)

    return VERSION["VERSION"]

version.py代码:

_MAJOR = "1"
_MINOR = "0"
_REVISION = "13"

VERSION_SHORT = f"{_MAJOR}.{_MINOR}"
VERSION = f"{_MAJOR}.{_MINOR}.{_REVISION}"

解决办法

1. 给VERSION字典添加明确的类型标注

把VERSION: Dict = {}修改为VERSION: Dict[str, str] = {},明确指定字典的键和值都是字符串类型。类型检查工具会据此推断VERSION["VERSION"]是str类型。

修改后的代码片段:

from typing import Dict
# ...
VERSION: Dict[str, str] = {}

2. 对返回值进行类型断言

使用cast函数直接告诉类型检查工具返回值的类型,需要先导入cast:

修改后的返回语句:

from typing import cast
# ...
return cast(str, VERSION["VERSION"])

3. 替换exec方式(更推荐)

exec本身不利于类型推断,最好把version.py作为模块直接导入,这样类型检查工具能直接识别VERSION的类型:

首先确保package_folder是可导入的模块,然后修改函数:

def write_ini() -> str:
    """Write version.ini file by extracting version from version.py."""
    from package_folder.version import VERSION
    
    print(VERSION)
    config["VERSION"] = {"cv_version": f"v{VERSION}"}

    with open("version.ini", "w") as configfile:
        config.write(configfile)

    return VERSION

这种方式完全避免了exec带来的类型模糊问题,同时代码更简洁安全。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:33:20