为什么get_name_by_addr返回''和org_by_addr返回None?

时间:2016-09-01 12:31:58

标签: python geoip maxmind

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

当数据库中找不到任何内容时,

org_by_addr返回None

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

country_name_by_addr函数返回空字符串。

这会强制我检查返回是否为None,然后将其设置为''以统一显示变量。

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

1 个答案:

答案 0 :(得分:0)

除了明显的"变量一致性",将NoneType更改为空字符串有什么意义?有一个原因

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

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

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

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

我的最终建议是废除传统的"类型"使用Python时。我的意思是C语言的打字。在python中有一个原因,你可以说:

if result:
    #some code

并且它适用于几种不同的"类型"。