簡體   English   中英

有沒有辦法將引發的異常等同於其他一些值

[英]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.

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