将参数传递给 requests.Session.get 会引发 TypeError

Luk*_*tra 3 python python-3.x python-requests

我试图理解为什么在我的例子中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')
Run Code Online (Sandbox Code Playgroud)

错误:

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
Run Code Online (Sandbox Code Playgroud)

Mat*_*ero 5

问题是get需要一个未命名的(位置)参数

def get(self, url, **kwargs):
    # ...
Run Code Online (Sandbox Code Playgroud)

您提供了两个:urlparams

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

return self.session.get(url, params=params)
Run Code Online (Sandbox Code Playgroud)