2013-07-02 51 views
1

我有同樣的問題,有兩種測試方法,這裏是主類的原始方法:如何解決錯誤:郵編參數#1必須支持迭代

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次測試。

回答

4

您的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)) 

是很多。

你也想避免對整數文字使用領先004被解釋爲八進制;如果你曾經到該號碼更改爲使用多個數字,或使用範圍0-7之外的數字,你會在一個討厭的驚喜:

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

錯誤解釋是怎麼回事:在參數拉鍊必須iterables(即列表,元組,或別的東西,你實際上可以遍歷)。你逝去的整數,即單數。

我不知道究竟你正在嘗試通過調用拉鍊做的,但也許你只是想比較真實和直接預期?

1

你的測試應該是這樣的:

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循環。

相關問題