typeError: not all arguments convereted during string formatting
typeError: not all arguments convereted during string formatting
我有一个函数如下(我正在处理 python2.7):
def ip_split(ip):
rtr, mask = cidr.split('/')
ip = ipaddress.ip_address(unicode(rtr))
if ip.version == 4:
n = ipaddress.IPv4Network(unicode(cidr), strict=False)
else:
n = ipaddress.IPv6Network(unicode(cidr), strict=False)
first, last = n[2], n[-2]
return n, first, last, n[1], n.network_address, mask
n_sub = "%s/%s" % ip_split('10.10.128.1/18')[3:]
Traceback (most recent call last):
File "python", line 18, in <module>
TypeError: not all arguments converted during string formatting
我收到类型错误:并非所有参数都在字符串格式化期间转换。
这里有什么问题吗??
您的 ip_split
函数 returns 一个 6 元组。如果您使用 [3:]
切片运算符,您将从索引 3
获取所有内容并进一步获取,因此这将是一个三元组。
但是您的格式化字符串 '%s/%s'
只有两个 %s
,因此 Python 会感到困惑。您可以(可能)通过从索引 4 进行切片来修复它,所以 [4:]
.
第二个问题是 %
优先于索引,因此它将表达式视为 ('%s/%s' % ip_split('10.10.128.1/18'))[3:]
,而我认为您希望首先获取元组的最后两项。您在这里使用空格这一事实并没有什么不同(是的,对于范围界定,Python 考虑了空格,但不考虑运算符优先级)。
或者,您可以使用更接近 "the last two items" 的 [-2:]
。所以:
n_sub = "%s/%s" % <b>(</b>ip_split('10.10.128.1/18')<b>[-2:]</b><b>)</b>
我有一个函数如下(我正在处理 python2.7):
def ip_split(ip):
rtr, mask = cidr.split('/')
ip = ipaddress.ip_address(unicode(rtr))
if ip.version == 4:
n = ipaddress.IPv4Network(unicode(cidr), strict=False)
else:
n = ipaddress.IPv6Network(unicode(cidr), strict=False)
first, last = n[2], n[-2]
return n, first, last, n[1], n.network_address, mask
n_sub = "%s/%s" % ip_split('10.10.128.1/18')[3:]
Traceback (most recent call last):
File "python", line 18, in <module>
TypeError: not all arguments converted during string formatting
我收到类型错误:并非所有参数都在字符串格式化期间转换。
这里有什么问题吗??
您的 ip_split
函数 returns 一个 6 元组。如果您使用 [3:]
切片运算符,您将从索引 3
获取所有内容并进一步获取,因此这将是一个三元组。
但是您的格式化字符串 '%s/%s'
只有两个 %s
,因此 Python 会感到困惑。您可以(可能)通过从索引 4 进行切片来修复它,所以 [4:]
.
第二个问题是 %
优先于索引,因此它将表达式视为 ('%s/%s' % ip_split('10.10.128.1/18'))[3:]
,而我认为您希望首先获取元组的最后两项。您在这里使用空格这一事实并没有什么不同(是的,对于范围界定,Python 考虑了空格,但不考虑运算符优先级)。
或者,您可以使用更接近 "the last two items" 的 [-2:]
。所以:
n_sub = "%s/%s" % <b>(</b>ip_split('10.10.128.1/18')<b>[-2:]</b><b>)</b>