簡體   English   中英

Python self.assertRaises

[英]Python self.assertRaises

我有一個如下的小代碼,請幫助我如何以正確的方式編寫此代碼。 我想檢查ID是否存在於value ,如果不存在則引發異常。

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"])

有關此問題的更多信息,請看一下這個問題 ,因為它似乎解決了有關如何正確使用assertRaises

另外請注意,在您的情況下,盡管有括號,但value僅是dict,而不是元組-為了使value單元素元組,請使用foo = (bar, )語法-需要用逗號分隔以區分優先級優先級括號,例如(2 + 2) * 3

同樣,在單元測試中,您通常不需要輸出任何與斷言狀態相關的信息-萬一它通過或失敗,則由單元測試框架完成,以形成適當的報告。 但是,如果您仍然願意打印它,則只需在斷言之后包括print() ,因為如果斷言失敗,測試將停止運行,並且控制權將不會到達您的print()

如果您不堅持使用assertRaises方法,我寧願選擇assertIn

value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
self.assertIn('ID', value)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM