发布
社区首页 >问答首页 >PyCharm中的list引发意外类型警告

PyCharm中的list引发意外类型警告
EN

Stack Overflow用户
提问于 2021-11-09 12:18:25
回答 4查看 278关注 0票数 4

切中要害,下面是将在PyCharm中引发错误的示例代码:

代码语言:javascript
代码运行次数:0
复制
list1 = [0] * 5
list1[0] = ''
list2 = [0 for n in range(5)]
list2[0] = ''

然后,PyCharm在第2行和第4行都返回一个错误,如下所示:

代码语言:javascript
代码运行次数:0
复制
Unexpected type(s):(int, str)Possible type(s):(SupportsIndex, int)(slice, Iterable[int])

运行代码不会导致任何错误,但当我编码时,PyCharm会不断地抛出上面的消息。我想知道为什么PyCharm会给出这个错误,我怎样才能用最干净的代码解决这个问题。谢谢。

编辑:抱歉,示例代码的第3行有一个拼写错误,已更正。(list2 = [0 for n in range(0)]应为list2 = [0 for n in range(5)])

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-11-09 12:51:05

在您的示例中,PyCharm看到您的第一行,并认为列表的类型是List[int]。我的意思是它是一个整数列表。

您可能会知道您的列表不是整型的,并且可以通过以下方式接受任何值:

代码语言:javascript
代码运行次数:0
复制
from typing import Any, List

list1: List[Any] = [0] * 5
list1[0] = ''

我使用键入模块只是为了解释这个想法。下面是一种简单的方式来声明list1只是一个包含所有内容的列表:

代码语言:javascript
代码运行次数:0
复制
list1: list = [0] * 5
list1[0] = ''

还要考虑使用尽可能严格的类型化。它可能会帮助你防止bug。

如果您同时需要字符串和int,则使用以下命令:

代码语言:javascript
代码运行次数:0
复制
from typing import List, Union

list1: List[Union[int, str]] = [0] * 5
# Starting from Python 3.10 you may use List[int|str] instead 

文档地址:https://docs.python.org/3/library/typing.html

票数 4
EN

Stack Overflow用户

发布于 2021-11-09 12:27:30

这只是来自代码检查工具的警告。

这基本上就是说,您创建了一个整数列表(包含5个等于0的项),然后用一个字符串替换一个整数。

这在python中不会产生错误,因为它对数据类型非常灵活,如果需要,您可以生成具有不同数据类型的列表。

它只是警告您,如果您稍后在一些代码中使用该列表,而这些代码只需要整数,而不是找到一个字符串项目,则可能会出现问题。

您可以通过禁用检查或直接创建字符串列表来解决此问题。

代码语言:javascript
代码运行次数:0
复制
list1 = [""] * 5
list2 = ["" for n in range(0)]

或者也可以

代码语言:javascript
代码运行次数:0
复制
list1 = ["0"] * 5
list2 = ["0" for n in range(0)]

或者,只要记住列表可能包含不同的数据类型,就可以忽略该警告。

票数 2
EN

Stack Overflow用户

发布于 2021-11-09 12:52:22

正如其他人所说,这只是一个警告,告诉你要小心。

如果您想明确说明您的列表接受任意值,您可以提供适当的类型提示:

代码语言:javascript
代码运行次数:0
复制
from typing import Any, List

list1: List[Any] = [0] * 5
list1[0] = ''

如果您打算放入整数或字符串,但列表中没有其他内容,您也可以从Python3.10开始执行list1: List[int|str] = [0] * 5,或者在旧版本上使用笨重的typing.Union

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69898015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档