我知道这个问题已经在这里发布了很多次但是我真的无法解决它所以我决定把我的功能和对应的错误希望有人能发现问题。我的以下函数被编写为Mininet模拟的脚本(基于python的SDN模拟):
def rules_count_thread(threadName, net, period):
fo = open("rules.txt", "w")
for i in range(period):
rCount = 0
for s in net.switches:
rStr = s.cmd('ovs-ofctl dump-tables ' + s.name + ' | grep classifier')
rCount = rCount + int(rStr[rStr.rfind('=') + 1:])
fo.write(str(time.time()) + ': ' + str(rCount) + '\n')
time.sleep(1)
fo.close()
我收到以下错误:
Unhandled exception in thread started by <function rules_count_thread at 0x7fc450195578>
Traceback (most recent call last):
File "./experiment.py", line 99, in rules_count_thread
rCount = rCount + int(rStr[rStr.rfind('=') + 1:])
ValueError: invalid literal for int() with base 10: 'table 0 ("classifier"):\r\n'
问题是当我使用int()
但我尝试使用float()
时,它也无效。我一直试图谷歌,但我仍然不知道如何解决它。
提前谢谢。
答案 0 :(得分:1)
问题是您的rStr
的值为'table 0 ("classifier"):\r\n'
。该字符串显然不代表整数。
请注意,rStr
中也没有=
,因此您的rStr.rfind('=') + 1
只会出现在0
。这让我相信你正在使用的字符串不是你想要的字符串。例如当你真的只想对行进行操作时,你可能正在尝试解析表的标题。