我有一個小代碼如下,請幫助我如何以正確的方式編寫此代碼。我想檢查ID是否存在於value
中,如果不存在,則會引發異常。Python self.assertRaises
value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
with self.assertRaises(IndexError, value[0]["ID"]):
print "not an error"
我有一個小代碼如下,請幫助我如何以正確的方式編寫此代碼。我想檢查ID是否存在於value
中,如果不存在,則會引發異常。Python self.assertRaises
value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
with self.assertRaises(IndexError, value[0]["ID"]):
print "not an error"
問題與您的代碼是value[0]["ID"]
只是一個武斷的說法,並在Python參數執行函數調用之前進行評估。所以在你的情況下,assertRaises
沒有機會攔截錯誤,因爲它沒有被調用。
我猜你正在尋找這個片段中,如果你想堅持使用上下文管理爲基礎的方法,你需要一次評估陳述或多個表達式是在情況下非常有用:
with self.assertRaises(IndexError):
value[0]["ID"]
或者你可以以這種方式工作,如果您需要解決單個表達式(報表不會lambda表達式工作):
self.assertRaises(IndexError, lambda: value[0]["ID"])
有關此更多的信息,看看this question,因爲它看似解決您的問題,關於如何正確使用assertRaises
。
也請你的情況注意value
只是字典,而不是元組,儘管括號 - 爲了使value
單元素元組,使用foo = (bar,)
語法 - 需要尾隨昏迷從優先覆蓋括號來區分,像(2 + 2) * 3
。
此外,在單元測試你不一般需要與您的斷言狀態輸出任何東西 - 如果它通過或不通過它的單元測試框架的工作,以形成相應的報告。但是,如果你願意打印它,只需在斷言後包含print()
- 因爲如果斷言失敗,測試將停止運行,並且控制將不會達到您的print()
。
好吧謝謝你的迴應。我會嘗試並回復你。 – user2511126
我試過使用它:它仍然不能正常工作,它拋出一個錯誤。 self.assertRaises(IndexError,拉姆達:值[0] [「ID」]) – user2511126
「值」包含一個數組,我並不擔心在最後的打印。我只想使用self.assertRaises函數來評估數組是否包含ID。 – user2511126
在你沒有在assertRaises
方法堅持的話,我寧願選擇assertIn
:
value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
self.assertIn('ID', value)
FWIW,代碼中引發了錯誤的理由,'({...})'是不是1字典,它只是一個字典(有一些額外的括號),你需要'({...},' – SingleNegationElimination