Python 如何解决错误:Zip参数#1必须支持迭代
我有两个相同问题的测试方法,这里是主类中的原始方法:Python 如何解决错误:Zip参数#1必须支持迭代,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我有两个相同问题的测试方法,这里是主类中的原始方法: 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_w
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参数#1必须支持迭代
该程序可以完全运行,这是20个不同测试中仅有的两个不工作的测试。您的
gen\u num\u指针()
和gen\u num\u单词()
方法返回一个整数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
>010
8.
>>> 08
文件“”,第1行
08
^
SyntaxError:无效令牌
该错误解释了发生的情况:zip的参数必须是可编辑的(即列表、元组或其他您可以实际迭代的内容)。你在传递整数
我不确定通过调用zip您到底想做什么,但也许您只是想直接比较真实和预期?您的测试应该如下所示:
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)
self.assertEqual(real, expected)
只有在断言多个值时,才有意义使用for
循环