【问题标题】:MyPy: what is the type of a requests object?MyPy:请求对象的类型是什么?
【发布时间】:2017-03-22 00:22:01
【问题描述】:

我正在尝试使用 Python 3 的类型提示语法以及 MyPy 静态类型检查器。我现在正在编写一个接受 requests 响应对象的函数,我想知道如何指示类型。

也就是说,在下面这段代码中,我可以用什么替换???

import requests

def foo(request: ???) -> str:
    return json.loads(request.content)['some_field']

r = requests.get("my_url")
return foo(r)

【问题讨论】:

  • type(some_object) 让您找出对象的类型。打印它,看看你是否可以从requests 导入它。提示:可以。 request.json() 也直接为您加载 json。无需手动操作。

标签: python python-requests typechecking python-3.6 mypy


【解决方案1】:

通过使用Response,或者提供它的完整路径:

def foo(request: requests.models.Response) -> str:
    return json.loads(request.content)['some_field']

或者,将其保存为您选择的名称:

Response = requests.models.Response

def foo(request: Response) -> str:
    return json.loads(request.content)['some_field']

p.s json.loads 需要 str,而不是 bytes,因此您可能希望首先使用 decode content

【讨论】:

  • 我需要导入什么才能使其工作?我收到Name 'requests' is not defined。如果我做import requests,它会起作用,但如果我做from requests import Session,它就不会。我需要指定什么?
  • 对于上面你会想要from requests import Response 并且 foo 将被定义为 foo(request: Response) 如果你只有import requests foo 将被定义为 foo(request: requests.models.Response )
  • 如果还不清楚,requests.Response == requests.models.Response
猜你喜欢
  • 2021-11-28
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多