【问题标题】:Why does get_name_by_addr return '' and org_by_addr return None?为什么 get_name_by_addr 返回 '' 而 org_by_addr 返回 None?
【发布时间】:2016-09-01 12:31:57
【问题描述】:

我目前正在测试我的一个类,它在 pygeoip 的帮助下设置变量。

org_by_addr 在数据库中没有找到任何内容时返回None

seek_org = self._seek_country(ipnum)
if seek_org == self._databaseSegments:
    return None

country_name_by_addr 函数返回一个空字符串。

这迫使我检查返回是否为None,然后将其设置为'' 以使变量统一。

有人知道,当数据库中没有条目时,给出不同返回的原因是什么?

【问题讨论】:

标签: python geoip maxmind


【解决方案1】:

除了明显的“变量一致性”之外,将 NoneType 更改为空字符串还有什么意义?是有原因的

bool ('') == bool (None) == False

在我看来,这是一种风格上的差异。然而,当一个包有不同的返回类型时,它可以暗示几件事:

- 如果函数返回 None,你可能会猜到如果在数据库中找到匹配项,该函数将返回一个实例化对象。 - 如果该函数不返回 None,而是返回一个空字符串,您至少可以期望该函数的输出在数据库中找到一个条目时返回一个有效字符串。 - 如果函数返回 0 而不是 None,您可能会猜到如果在数据库中找到条目,该函数将返回某种数字

所以实际上它主要是关于以某种方式告知用户有效的返回类型是什么。

我的最后建议是在使用 Python 时摒弃传统的“类型”思想。我的意思是C的打字哲学。在python中有一个理由可以这么说:

if result:
    #some code

并让它在几种不同的“类型”中有效。

【讨论】:

  • 我更改了它,因为我后来确实将变量插入到数据库中,这显然不适用于 None。我只是想知道为什么返回不同,但是没有返回有效值的原因是相同的(IP不在数据库中)。
  • 我明白了,我将您的问题误读为:“为什么任何库中的函数都不会返回一致的类型?”我的错。似乎 Rolsky 先生提供了一些额外的信息,并且 GeoIP2 是要使用的库。
猜你喜欢
  • 2013-05-30
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 2016-06-20
  • 1970-01-01
相关资源
最近更新 更多