Pycharm: 期望类型为'Integral',但得到的是'str
我刚安装了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 是在引导我们朝这个方向走呢?