hynet1024 发表于 2025-1-3 12:56:37

问题求助

最近重装安装了Python,修改了安装路径,然后就出现了众多提示,但是代码能正常运行。
以下为提示之一,请各位指教。

代码:
wb = openpyxl.load_workbook('行政区划表.xlsx')['Sheet1']
code_data = dict(list(wb.iter_rows(values_only=True)))

其中第2行dict之后被标记,并提示以下信息:

“__init__”的重载与提供的参数不匹配Pylance(reportCallIssue)

builtins.pyi(1109, 9): 重载 8 是最接近的匹配项

class dict(): ...

class dict(
    map: SupportsKeysAndGetItem,
    /
): ...

class dict(
    iterable: Iterable],
    /
): ...

class dict(
    iterable: Iterable],
    /
): ...

dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's
    (key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
    d = {} for k, v in iterable:
      d = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
    in the keyword argument list. For example: dict(one=1, two=2)



FishC 发表于 2025-1-3 13:02:48

看起来您遇到的问题是由于Pylance的类型检查,它可能认为`iter_rows`返回的结果不符合`dict`的要求。

`openpyxl.iter_rows(values_only=True)`返回的是一个生成器,每一行都是一个元组。因此,直接用`dict`转换可能会引起`类型不匹配`的警告,因为`dict`需要一个可以解包成键值对(即两个元素的可迭代对象)。

要解决这个问题,首先要确保`iter_rows`生成的每一行确实是键值对。如果你期望用第一列作为键,第二列作为值,你可以这样写:

wb = openpyxl.load_workbook('行政区划表.xlsx')
sheet = wb.active
code_data = {row: row for row in sheet.iter_rows(values_only=True)}

这样做可以确保每一行都变成`{key: value}`的形式。同时,请确认您的Excel表内数据格式符合这个结构。

如果执行之后仍遇到问题,检查数据中是否有空值或单元格格式问题,这也可能会引发类似警告。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 问题求助