【问题标题】:Passing params into requests.Session.get raises TypeError将参数传递给 requests.Session.get 会引发 TypeError
【发布时间】:2017-11-23 18:34:47
【问题描述】:

我试图理解为什么在我的示例中将 params 传递给 session.get 会引发 TypeError。 response_get 返回 200 响应,而 response_open 引发 TypeError。

import requests


class Foo:

    def __init__(self):
        self.session = requests.Session()

    def get(self, url, params=None):
        """Return a Response object."""
        return requests.get(url, params)

    def open(self, url, params=None):
        """Return a Response object using the Session object."""
        return self.session.get(url, params)


if __name__ == '__main__':
    foo = Foo()
    response_get = foo.get('https://estilen.github.io')
    response_open = foo.open('https://estilen.github.io')

错误:

Traceback (most recent call last):
  File "/home/estilen/Dropbox/Python/leapy/foo.py", line 21, in <module>
    response_open = foo.open('https://estilen.github.io')
  File "/home/estilen/Dropbox/Python/leapy/foo.py", line 15, in open
    return self.session.get(url, params)
TypeError: get() takes 2 positional arguments but 3 were given

【问题讨论】:

  • self.session.get中取出params参数,就可以了……
  • @whackamadoodle3000 这违背了我的问题的目的。 :P

标签: python python-3.x python-requests


【解决方案1】:

问题是get 需要only one un-named (positional) argument

def get(self, url, **kwargs):
    # ...

您提供两个:urlparams

要解决此问题,您需要提供 params 作为命名(关键字)参数:

return self.session.get(url, params=params)

【讨论】:

  • 有趣,我一直认为session.getrequests.get 是相同的。
  • @LukaszSalitra 好吧,它们的行为方式相同,但由于某些原因有不同的签名......
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多