【问题标题】:if <var> is None: doesn't seem to wotk如果 <var> 为 None:似乎不起作用
【发布时间】:2021-01-07 22:02:21
【问题描述】:

免责声明:我对 python 很陌生,不知道自己在做什么,我是在网上自学。

我有一些看起来像这样的代码

代码:

from request import get # Ed: added for clarity

myurl = URLBASE + args.key
response = get(myurl)

# check key is valid
json = response.text # Ed: this is a requests.Response object 
print(json)

if json is None:
    sys.exit("Problem getting API data, check your key")

print("how did i get here")

输出:

null
how did i get here

但我不知道这是怎么可能的......它在打印中字面上说它是空的,但在'if'中不匹配。任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 你从未解析过 JSON,所以它是字符串 "null"。不确定get 是什么,但请尝试json = response.json
  • 字符串"null" 不是对象None
  • 唯一的 NoneNone 本身。
  • @Ry- 有正确的想法,但您需要使用response.json(),因为response.json 只会让您陷入类似的陷阱。

标签: python if-statement nonetype


【解决方案1】:

所以我确信我仍然没有完全理解,但这“解决”了我的问题。

requests.Response object 具有属性/方法 json - 所以我应该一直使用它,感谢 wim,而不是 text。因此,按照建议将代码更改为 (下) 会使代码工作。

from request import get

myurl = URLBASE + args.key
response = get(myurl)

# check key is valid
json = response.json()

if json is None:
    sys.exit("Problem getting API data, check your key")

print("how did i get here")

问题(我好奇地)仍然存在,我将如何执行 if 语句来确定字符串是否为空?

感谢 Ry 和 wim,感谢他们的帮助。

【讨论】:

  • if some_string == "null"。在这种情况下,字符串不是null 对象(在Python 中不存在,它被称为None),它是一个内容为"null" 的字符串;也就是说,字符null 按顺序排列。
  • 感谢@Adam Smith,抽出宝贵的时间,这行得通(你可能知道),现在我已经在代码中对其进行了测试,并且能够使其工作,并理解它和python更好的。感谢您的帮助。
  • 废话一个问题,字符串可以为空吗?或者如果字符串为空,它是否填充了“空”?你想要一个内容为“null”的字符串,或者如果你想比较stings,你将如何区分“null”(字符串)和(实际上)null(或空)
  • Python中只有一个空对象,它是单例None。内容为"null" 的字符串只是一个常规字符串。一个空字符串看起来像""
  • (“空字符串”看起来像None,与“空任何其他”相同。这实际上是您的问题,因为响应文本是文本“空”在 Python 中没有特殊含义。它旨在被解析为 JSON,它正确地将其识别为 null 对象并适当地反序列化为 None)
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 2013-01-31
  • 2019-05-09
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2018-02-04
相关资源
最近更新 更多