Pycharm:期望类型为“Integral”,但实际得到的是“str”

14

我刚刚安装了 PyCharm 3.4,出现了一些新的警告。不仅在这里,在很多地方都是如此。当然,代码是没问题的。有人能翻译一下 PyCharm 告诉我的内容以及如何消除这些消息吗?

截图 更多...


6
大概PyCharm认为item是一个列表或元组。 - Martijn Pieters
请发布更多您的代码,特别是分配items的部分。 - huu
1
右侧有一个更大的屏幕截图。链接“更多...”。 - avalanchy
1
截图不是查看代码的最佳方式,你能否将代码以纯文本形式添加进来? - Collin
1
可能你需要询问一些PyCharm开发人员 --- PyCharm的检查会有很多误报。 - jb.
@avalanchy 你可能需要回答。但是,我建议在这里使用生成器,因为最终你会进行过滤,需要遍历整个集合。这样就不会创建数组并分配信息,直到使用过滤器遍历它。 - Fallenreaper
2个回答

9
根据“more...”截图,看起来Pycharm可能将map()解释为逗号两侧的两个术语都是lambda的一部分,即lambda仅返回一个二元组,而不是将其视为map()函数的两个参数。
尝试以下操作:
- 在map()内添加括号 - 查找重新定义map()内置函数的情况,这可能会使Pycharm感到困惑
编辑:
你激励我去学习更多关于Python和Pycharm的知识。:)
看起来Pycharm更喜欢使用列表推导式而不是map()。使用此示例数据:
data = {
    'data': {
        'children': [
            {'data': {'url': 'http://1.com/', }, },
            {'data': {'url': 'http://2.com/', }, },
        ]
    },
}

如果您编写的代码像您所做的那样,那么就会出现错误:

items = map(lambda children: children['data'], data['data']['children'])
for item in items:
    print item['url']  # Pycharm shows warning on 'url'

但如果您使用列表推导式,那么Pycharm就会很高兴:

items = [x['data'] for x in data['data']['children']]
for item in items:
    print item['url']  # No warning from Pycharm

输出结果对于两者都是相同的。

我记得现在推荐使用列表推导式而不是 map(),所以也许Pycharm正在引导我们朝这个方向发展?


3
为什么列表推导式比map()更受欢迎? - petroslamb
加入问题 - Maorg

5

如果您使用 get() 从字典中获取值,也可以消除此通知。应该是这样的:

fresh_urls = {item.get('url') for item in items}

这样做可以达到效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接