【问题标题】:Python NoneType or Null Value CheckingPython NoneType 或 Null 值检查
【发布时间】:2021-02-19 17:20:42
【问题描述】:

我正在使用 python3 请求从 API 中提取数据。然后我 json 响应。其中一个字段可以具有字符串值或为空。从一个简单的测试开始,我刚刚将值打印到屏幕上。但是,当值为 null 时,我无法打印,因为 NoneType 类并且它失败了。如果我打印出类型,我会看到“”。

代码如下。我正在检查响应是否为无,并且仅在它不为空时打印出来。但是,当 jResponse["variable"] 的值为 null 或 none 时,我现在收到 TypeError: 'NoneType' object is not subscriptable 错误并指向 if 语句行。

response = requests.request("GET", url, headers=headers, data = payload)
jResponse = response.json()

if jResponse["variable"] is not None:
      print(jResponse["variable"])

上面的结果会打印出变量数据,如果它不为null,但是当它为null时就失败了。

我认为is not None 是检查python null 的正确方法。

编辑 - 请求响应:

    "response": {
        "variable1": value,
        "variable2": value,
        "variable3": value,
        "section1": {
            "variable1": value,
            "variable2": null,

第 1 节中的变量 2 是我正在检查的变量,有时可能为空。所有其他变量都得到了很好的响应。

【问题讨论】:

  • 你想要if jResponse.get("variable"):
  • 让我试试。这是否记录在任何地方的 python 请求中?
  • 在上面编辑以获取返回的响应。所有其他变量都返回正常,我正在收集他们的所有数据。 section1:variable2 是可以为 null 的,是我需要检查的,也是导致我出现问题的。如何调整 .get() 以检查该变量?

标签: python null typeerror nonetype


【解决方案1】:

我发现我对状态 200 OK 的检查不在正确的位置,实际上在我的 while 循环开始后我得到了 408 超时。因此,即使我认为响应会回来,但实际上在数据收集期间已经超时。我将我的 200 OK 检查上移,现在所有响应和数据收集都必须通过 200 OK 检查。我现在看到它很好。

【讨论】:

    【解决方案2】:

    您应该检查 jResponse 也不是 None:

    if jResponse is not None and jResponse["variable"] is not None:
    

    【讨论】:

    • 我已经添加了。我还检查了 200 响应,以确保返回的响应良好。但结果相同。