Python: Почему моя функция не отображает то, что возвращается в интерпретаторе?

1

В интерактивном интерпретаторе Python:

Я импортирую модуль, содержащий класс. Это методы этого класса (некоторые из них):

    def do_api_call(self, params):
        return self.__apicall(params)

    def __apicall(self, params):
        return urllib2.urlopen(self.endpoint, params).read()

Когда я импортирую класс и использую метод do_api_call(), он ничего не выводит при завершении работы.

    def do_api_call(self, params):
        print(self.__apicall(params))

    def __apicall(self, params):
        return urllib2.urlopen(self.endpoint, params).read()

Я создаю экземпляр класса и запускаю метод:

myapi = MyAPIClass()
myapi.do_api_call(params={'param': 'value'})

Однако, когда я делаю вторую версию (обратите внимание на функцию печати), она выдает HTML-адрес вызываемой страницы.

Почему первая версия не выводит ничего? Работает (т.е. получает страницу и не вызывает никаких ошибок).

  • 1
    Поведение, которое вы описываете, кажется невозможным (в первой версии вместо этого должен отображаться repr этого HTML). Пожалуйста, отредактируйте, чтобы предоставить полный интерактивный сеанс (настолько малый, насколько это возможно, но воспроизводящий это поведение), который я и другие могут скопировать и вставить для проверки (и информацию о версии Python, версии ОС и т. Д.).
  • 0
    Я тоже так думал. Невозможно. Я получу еще немного кода. Больше всего меня поражает то, что я буквально дважды беру точный код, единственное изменение - функция print ().
Показать ещё 7 комментариев
Теги:

1 ответ

1
Лучший ответ

Ваша первая версия возвращает только то значение, которое вы хотели бы видеть в качестве вывода. Вторая версия действительно печатает это значение.

Если бы я был вами, я бы рассмотрел сохранение возвращаемого значения вызова первой версии в переменную и печать этой переменной. Это должно решить вашу проблему.

  • 1
    Интерактивный переводчик. Работает по другому.
  • 0
    Это все еще не исправлено, но ваша идея подтвердила мое подозрение. Я попытался распечатать результат после сохранения result.read () в памяти. Это работало нормально, затем я попытался вернуть результат, но ничего не сделал (т. Е. В одной строке указано «print (result)», а в следующей строке указано «print (« output output »)», а в следующей - «return result». результат, за которым следует «результат напечатан». Больше ничего не выводилось.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню