2016-09-01 13 views
0

現在、pygeoipの助けを借りて変数を設定するクラスをテストしています。get_name_by_addrが ''を返し、org_by_addrが何も返さないのはなぜですか?

org_by_addr戻りNoneデータベースで見つかったものがないとき:

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

country_name_by_addr関数は空の文字列を返しますが。

これは、私が戻り値がNoneであるかどうかを確認し、変数を一様に持つように''に設定するように強制します。

データベースにエントリがないときに、異なるリターンを与える理由は何ですか?

+0

こんにちはPhillipB、私は[新しいGeoIP2データベース](http://dev.maxmind.com/geoip/geoip2/downloadable/)と[対応するpythonライブラリ](https://pypi.python .org/pypi/geoip2)。この新しいコードは、従来のライブラリよりもはるかに高品質です。 –

+0

@DaveRolskyありがとうございました。私はすぐにそれを見ていきます。 – PhilipB

答えて

0

明白な「可変一様性」以外に、NoneTypeを空の文字列に変更する点は何ですか?理由があります

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

私の意見では、これは文体の違いです。しかし、パッケージにこのような異なる戻り値の型があると、いくつかのヒントが得られます。

この関数がNoneを返す場合、データベース内で一致するものが見つかった場合、その関数がインスタンス化されたオブジェクトを返すと考えられます。 -if Noneを返す代わりに、関数は空の文字列を返します。データベースにエントリが見つかると、その関数の出力から有効な文字列を返すことが少なくとも可能です。 - 関数でNoneの代わりに0が返された場合、データベースにエントリが見つかった場合に関数が何らかのソートを返すと推測することができます。

実際には、有効な戻り値の型になります。

私の最後の提案は、Pythonを使用する際の伝統的な「型」の考え方を捨てることです。それで、私はタイピングのC哲学を意味します。 Pythonでは、あなたが言うことができる理由があります:

if result: 
    #some code 

そして、いくつかの異なる "タイプ"にわたって有効であることがあります。

+0

私は後で変数をデータベースに挿入するので、私はそれを変更します。これは明らかにNoneで動作しません。私はなぜ戻り値が異なるのだろうと思っていますが、有効な値を返さない理由は同じです(IPはデータベースにありません)。 – PhilipB

+0

私はあなたの質問を誤解しています:「なぜANYライブラリの関数は一貫した型を返さないのですか?私の間違い。 Rolsky氏はいくつかの追加情報を提供しているようで、GeoIP2は使用するライブラリです。 –

関連する問題