Pycharm: Ожидаемый тип 'Integral', вместо этого 'str'

Я только что установил PyCharm 3.4 и получил несколько новых предупреждений. Не только здесь, но и во многих местах. Код, конечно, конечно. Может ли кто-нибудь перевести то, что пытается написать PyCharm и как заставить замолчать эти сообщения?

screenshotподробнее...

Ответ 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}