我正在嘗試運行 pytest 來測驗我的函式,但我遇到了一個問題,我試圖拆分一個名為 get_prepositional_phrase(amount) 的函式,該函式將三個變數的字串回傳到每個變數中,但是在我拆分它之后,我不斷得到一個串列索引超出范圍錯誤
我要拆分的字串的代碼是:
phrase = (f'{connect} {determiner2} {noun2}')
我的代碼在下面用于測驗功能。
def test_get_prepositional_phrase():
phrase1 = get_prepositional_phrase(1)
prep = ["about", "above", "across", "after", "along",
"around", "at", "before", "behind", "below",
"beyond", "by", "despite", "except", "for",
"from", "in", "into", "near", "of",
"off", "on", "onto", "out", "over",
"past", "to", "under", "with", "without"]
for word in phrase1:
parts = word.split()
one = parts[0]
# two = parts[1]
# three = parts[2]
for _ in range(30):
connector = get_preposition()
assert one in connector
uj5u.com熱心網友回復:
parts如果串列中只有一個(或零個)專案,第 115 行將引發例外。鑒于您的代碼是
one = parts[1]
# two = parts[1]
# three = parts[2]
我會說你應該分配給,parts[0]而不是。此外,要遵循的一個好規則是首先檢查所有必需的先決條件。這將涉及:parts[1]one
assert type(phrase1) is list # Is list.
assert len(phrase1) >= 2 # Minimum size.
assert(all([type(x) is str for x in phrase1])) # All items are string.
for word in phrase1:
pass # Guaranteed safe to use word[1] as a string here.
無論如何,您的短語構造為:
f'{connect} {determiner2} {noun2}'
意味著它是單個字串而不是單詞串列。這意味著:
for word in phrase1: # One character at a time.
parts = word.split() # One-element list with that character.
one = parts[1] # NO !
將始終為您提供 word 中的單字符字串,因此parts將始終是包含該單字符字串的單元素串列。因此parts[1]運算式將失敗。
您需要的是以下內容:
for word in phrase1.split(): # One word at a time.
one = word[0]
# two = word[1]
# three = word[2]
底線:for i in a_string為您提供字串的每個字符,同時for i in a_list_of_strings為您提供串列中的每個字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/471064.html
上一篇:將短語串列轉換為相應的數字
