我有这段代码,并希望最终将re.findall()
响应中的IP地址转换为字符串。但我总是收到错误(见下文)。
url = 'http://checkip.dyndns.org'
request = urllib.urlopen(url).read()
ip = str(re.findall(r'[0-9]+(?:\.[0-9]+){3}', request))
print ip
我总是收到此错误
TypeError: not all arguments converted during string formatting
有人能告诉我转换它的最佳方法是什么? 谢谢。
答案 0 :(得分:1)
我想您的问题是,您正在将re.findall()
转换为字符串,但该函数会返回注释中提到的列表。所以最好的方法是使用re.findall(...)[0]
如果你只想要一个结果/一个ip,如果没有,那么打印所有结果:
ips = re.findall(r'[0-9]+(?:\.[0-9]+){3}', request)
for ip in ips:
print str(ip)
就个人而言,我认为最好是打印所有内容,或者至少检查re.findall()
的长度,因为你很容易错过这种方式。另外,我建议您this站点进行正则表达式调试。 :)