0
import netifaces as ni
ip = ni.ifaddresses("eth0")[ni.AF_INET]['addr']

错误

ip = ni.ifaddresses("eth0")[ni.AF_INET]['addr'] ValueError: 您必须指定一个有效的接口名称。

ip = ni.ifaddresses("en0")[ni.AF_INET]['addr']

错误

ip = ni.ifaddresses("en0")[ni.AF_INET]['addr'] TypeError: list indices must be integers or slices, not str

有谁知道为什么mac会出现这样的错误?

4

1 回答 1

1

第一个错误意味着没有名为 的接口eth0。事实上,这是 Linux 上的常用接口名称,但在 MacOS 上不是。

第二个错误意味着您正在尝试提取一个不存在的字段。有关于en0但它是一个数组,而不是一个字典的信息。这就像说"hello"["addr"],没有办法访问"addr"序列的第 :th 元素。你显然的意思是

ip = ni.ifaddresses("en0")[ni.AF_INET][0]['addr']

尽管没有办法断章取义地判断是否只获得一个地址实际上是您想要的。你得到的数组代表了一些绑定;也许你想要所有这些?

addrs = ni.ifaddresses('en0')
ips = [x['addr'] for x in addrs[ni.AF_INET]]

netifaces文档实际上非常详细地解释了这一点。

于 2019-01-03T11:38:52.913 回答