类型错误:需要一个类似字节的对象,而不是 python 中 geolite2 函数中的“str”

gom*_*ena 7 python

我有一个程序显示属于 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

要检查它是否适合您:

  1. 以交互模式运行 python3
  2. 运行以下命令:
>>> 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)


Ral*_*alf 1

我认为 lib https://github.com/mitsuhiko/python-geoip无法在Python 3.x.

我查看了GitHub中的源代码;已经 5 年没有更新了,而且它仍然使用无法工作的Python 2.x构造(如xrange()这一geoip.py#L255Python 3.x) (也许你很幸运,你的代码不会使用旧构造调用代码部分,但我不会持有我的呼吸)。

看来您必须克隆该存储库并根据3.x自己的情况进行调整或寻找替代方案。