1

我有一个功能如下(我正在使用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

我收到 typeError: not all arguments 在字符串格式化期间转换。

这里有什么问题??

4

1 回答 1

2

您的ip_split函数返回一个 6 元组。如果您使用[3:]切片运算符,您将从索引中获取所有内容,3并且进一步,这将是一个 3 元组。

但是您的格式化字符串'%s/%s'只有两个%ss,所以 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:])
于 2018-01-04T19:43:13.640 回答