[英]Is there a way to equate a raised exception with some other value
我正在嘗試python-koans:
定義了一個舊樣式類:
class A:
pass
我們知道舊樣式類沒有定義__class__
。
提供了一個斷言聲明,我需要通過。
self.assertEqual(__, A.__class__)
我希望在空白中填充一些值,即第一個參數,以便它通過。 A.__class__
會引發屬性錯誤。 我該怎么做這個測試通過?
使用type()
而不是嘗試直接訪問.__class__
。 對於舊式類,這將返回types.ClassType
:
>>> from types import ClassType
>>> class Foo: pass
...
>>> type(Foo) is ClassType
True
一般來說,對於每個dunder(雙下划線, __...__
)名稱,這些鈎子都有一個API函數或運算符。 使用API函數或運算符而不是直接訪問鈎子。 例如,使用str(f)
代替f.__str__()
等。
如果要對異常進行測試,則可能需要使用assertRaises()
上下文管理器來測試特定的異常:
with self.assertRaises(Foo) as cm:
function_under_test()
然后,您仍然可以訪問異常實例cm.exception
以進行進一步測試。
這是一個可怕的想法,但是嘿 - Python讓你做任何事,對吧?
assertEqual(setattr(A, "__class__", type) or type, A.__class__)
我想我可能會作弊。
這可能是無關緊要的,但可能的用例是將異常的類等同於特定的異常類。 附加示例代碼
try:
1/0
except (ZeroDivisionError) as e:
pass
#equate an exception with a class of exception
isinstance(e, ZeroDivisionError)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.