Skip to main content
 首页 » 编程设计

python之如何解决错误 : Zip argument #1 must support iteration

2025年05月04日29freeliver54

我有两个测试方法有同样的问题,这里是主类中的原始方法:

def get_num_words(self, word_part): 
    """ 1 as default, may want 0 as an invalid case """ 
    if word_part[3] == '0a': 
        self.num_words = 10 
    else: 
        self.num_words = int(word_part[3]) 
    return self.num_words 
 
def get_num_pointers(self, before_at): 
    self.num_pointers = int(before_at.split()[-1]) 
    return self.num_pointers 

下面是两个测试类:

def test_get_num_words(self): 
    word_part = ['13797906', '23', 'n', '04', 'flood', '0', 'inundation', '0', 'deluge', '0', 'torrent', '0', '005', '@', '13796604', 'n', '0000', '+', '00603894', 'a', '0401', '+', '00753137', 'v', '0302', '+', '01527311', 'v', '0203', '+', '02361703', 'v', '0101', '|', 'an', 'overwhelming', 'number', 'or', 'amount;', '"a', 'flood', 'of', 'requests";', '"a', 'torrent', 'of', 'abuse"'] 
    expected = 04 
    real = self.wn.get_num_words(word_part) 
    for r, a in zip(real, expected): 
        self.assertEqual(r, a) 
 
def test_get_num_pointers(self): 
    before_at = '13797906 23 n 04 flood 0 inundation 0 deluge 0 torrent 0 005' 
    expected = 5 
    real = self.wn.get_num_pointers(before_at) 
    for r, a in zip(real, expected): 
        self.assertEqual(r, a) 

这是他们给出的错误:TypeError: zip argument #1 must support iteration 该程序可以完全运行,而在 20 种不同的测试中,只有这 2 种测试没有运行。

请您参考如下方法:

您的gen_num_pointers() 和gen_num_words() 方法返回一个整数。 zip() 只能处理序列(列表、集合、元组、字符串、迭代器等)

你根本不需要在这里调用zip();您正在测试一个整数与另一个整数的对比:

def test_get_num_words(self): 
    word_part = ['13797906', '23', 'n', '04', 'flood', '0', 'inundation', '0', 'deluge', '0', 'torrent', '0', '005', '@', '13796604', 'n', '0000', '+', '00603894', 'a', '0401', '+', '00753137', 'v', '0302', '+', '01527311', 'v', '0203', '+', '02361703', 'v', '0101', '|', 'an', 'overwhelming', 'number', 'or', 'amount;', '"a', 'flood', 'of', 'requests";', '"a', 'torrent', 'of', 'abuse"'] 
    self.assertEqual(4, self.wn.get_num_words(word_part)) 
 
def test_get_num_pointers(self): 
    before_at = '13797906 23 n 04 flood 0 inundation 0 deluge 0 torrent 0 005' 
    self.assertEqual(5, self.wn.get_num_pointers(before_at)) 

足够了。

您还希望避免在整数文字上使用前导 0。 04 被解释为一个八进制 数字;如果您不得不将该数字更改为使用更多数字,或使用 0-7 范围之外的数字,您将大吃一惊:

>>> 010 
8 
>>> 08 
  File "<stdin>", line 1 
    08 
     ^ 
SyntaxError: invalid token