我有一个程序显示属于 Ip 地址的国家/地区。它在 python 2.7 版本中工作正常。问题是当我在 python 3.5 版本中尝试相同的程序时,它会抛出如下错误:
代码:
from geoip import geolite2
m = geolite2.lookup('17.0.0.1')
Run Code Online (Sandbox Code Playgroud)
错误:
TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)
我该如何解决该错误?
提前致谢
小智 7
上面的答案是正确的,为 Python3 安装正确的包。要强制安装 Python3,请使用:
python3 -m pip install python-geoip-python3
然而,为了受益于 geoip 的完整功能,您还可以考虑另外下载geolite2,它也附带了 IP 数据库:
python3 -m pip install python-geoip-geolite2
要检查它是否适合您:
>>> from geoip import geolite2
>>> geolite2.lookup('8.8.8.8')
Run Code Online (Sandbox Code Playgroud)
你应该得到这样的东西
<IPInfo ip='8.8.8.8' country='US' continent='NA' subdivisions=frozenset({'CA'}) ...
Run Code Online (Sandbox Code Playgroud)
我认为 lib https://github.com/mitsuhiko/python-geoip无法在Python 3.x.
我查看了GitHub中的源代码;已经 5 年没有更新了,而且它仍然使用无法工作的Python 2.x构造(如xrange()这一行geoip.py#L255Python 3.x) (也许你很幸运,你的代码不会使用旧构造调用代码部分,但我不会持有我的呼吸)。
看来您必须克隆该存储库并根据3.x自己的情况进行调整或寻找替代方案。