typeError:在字符串格式化期间,并非所有参数都集中



我有一个函数如下(我正在研究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函数返回一个 6 元组。如果使用[3:]切片运算符,则将从索引3及更进一步的地方获取所有内容,因此这将是一个 3 元组。

但是你的格式化字符串'%s/%s'只有两个%s,所以Python会感到困惑。您可以(可能)通过从索引四切片来修复它,所以[4:].

第二个问题是%优先于索引,因此它将表达式视为('%s/%s' % ip_split('10.10.128.1/18'))[3:],而我认为您希望首先获取元组的最后两项。你在这里使用空格的事实并没有区别(是的,对于范围,Python 考虑了空格,但不考虑运算符优先级)。

或者,您可以使用更接近"最后两项"的[-2:]。所以:

n_sub = "%s/%s" %(ip_split('10.10.128.1/18')[-2:])

相关内容

  • 没有找到相关文章

最新更新