我在我导入脚本的数组中有JSON
"ip_address": [
"192.168.0.1",
"192.168.0.2",
"192.168.0.3"
]
我正在加载JSON并声明一个名为ip_address的变量。
data = yaml.load(message)
for d in data:
ip_address = (d.get('ip_address'))
我试图通过ip地址使用python循环。
for address in data['ip_address']:
print(address)
我现在收到一条告诉我的错误
string indices must be integers, not str
答案 0 :(得分:2)
在您的情况下ip_address = '192.168.0.1'
您确定ip_address
中有正确的价值吗?
答案 1 :(得分:2)
它打印个别号码的原因是因为地址是一个字符串。因此,它并不是每个正在打印的数字,而是每个字母的字母。考虑:
word = "abc"
for letter in word:
print(letter)
# prints:
# a
# b
# c
因此,它意味着您将某个IP地址分配给变量,然后遍历该变量(这是一个字符串)。如果没有提供有关如何获得ip_address
变量的更多代码,则很难说出问题所在。
打印IP地址的一种方法(假设你有一个dict):
addresses = {"ip_address": [
"192.168.0.1",
"192.168.0.2",
"192.168.0.3"
]}
for address in addresses["ip_address"]: # this gets you a list of IPs
print(address)
即使你把它们放在其他地方,要带走的关键洞察力是不要遍历字符串,因为你会得到字符(除非那是你想要的)。
已更新以解决修改
由于我没有你正在加载的文件(是文件吗?),我会假设我有你发布的确切字符串。这是您使用所提供的数据打印每个地址的方式。请注意,您的情况可能略有不同,因为,我不知道完整的代码。
# the string inside load() emulates your message
data = yaml.load('"ip_address": ["192.168.0.1", "192.168.0.2", "192.168.0.3"]')
ip_addresses = data.get('ip_address')
for address in ip_addresses:
print(address)
答案 2 :(得分:0)
我试过以下:
ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]
>>> ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]
>>>
>>> for i in ip_address:
... print i
... 它打印
192.168.0.1
192.168.0.2
192.168.0.3
它似乎对我来说很好。