Pycharm: 期望类型为'Integral',但得到的是'str

14 投票
2 回答
34011 浏览
提问于 2025-04-18 08:05

我刚安装了PyCharm 3.4,结果看到了一些新的警告。这些警告不仅在这里出现,在很多地方都有。我的代码当然是没问题的。有人能帮我解释一下PyCharm想告诉我什么吗?还有,怎么才能让这些消息不再出现呢?

截图

更多...

2 个回答

5

如果你用 get() 从字典里取值的话,也可以避免这个通知。你可以这样写: fresh_urls = {item.get('url') for item in items}

9

根据“更多...”的截图,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 是在引导我们朝这个方向走呢?

撰写回答