新十歲上下到Python,但我試圖理解這個代碼片段:pytest.raises(錯誤)如何工作?
with pytest.raises(ValueError):
group_adjust(vals, [grps_1, grps_2], weights)
閱讀this tutorial on with後,我明白了pytest.raises()
返回一個上下文管理器,設置和之前清理東西,group_adjust()
後調用。我也明白group_adjust()
應該提出一個ValueError
如果出現問題。
當一個ValueError被引發時pytest如何「反應」? AFAIK,只有設置和清理,所以我不知道它如何捕捉異常。最終目標是瞭解pytest作爲上下文管理器的好處。
這是否意味着'raise'語句調用__exit __()魔術函數? – joshualan
@joshualan,不完全如此。其實'raise'不叫任何東西。當解釋器評估「RAISE_VARARGS」操作碼時,它解開堆棧以找到「except」或「finally」塊。 'with'語句通過調用'__exit__'方法在幕後創建'finally'塊。所以,'raise' * calls *'__exit__',但間接。 – soon