Я только что установил PyCharm 3.4 и получил несколько новых предупреждений. Не только здесь, но и во многих местах. Код, конечно, конечно. Может ли кто-нибудь перевести то, что пытается написать PyCharm и как заставить замолчать эти сообщения?
Pycharm: Ожидаемый тип 'Integral', вместо этого 'str'
Ответ 1
Основываясь на скриншоте "Еще...", похоже, что Pycharm может интерпретировать карту(), как если бы оба члена вокруг запятой были частью лямбда, т.е. лямбда просто возвращает 2-кортеж вместо обработки его как двух параметров функции 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
И результат одинаковый для обоих.
Чтение ISTR, что в настоящее время предпочтения в списках предпочтительнее map()
, поэтому, возможно, Pycharm подталкивает нас в этом направлении?
Ответ 2
Вы также можете избавиться от этого уведомления, если вы получите значение из словаря с помощью get()
. Это должно работать:
fresh_urls = {item.get('url') for item in items}