Я пытаюсь понять некоторые Python 2.5 код, и я наткнулся на этот шаблон:«поднять» с последующим условным оператором (питон)
def __init__(self, matrix, top_buttons, side_buttons, config_button):
raise isinstance(matrix, ButtonMatrixElement) or AssertionError
raise matrix.width() == 8 and matrix.height() == 8 or AssertionError
raise isinstance(top_buttons, tuple) or AssertionError
raise len(top_buttons) == 8 or AssertionError
raise isinstance(side_buttons, tuple) or AssertionError
raise len(side_buttons) == 8 or AssertionError
raise isinstance(config_button, ButtonElement) or AssertionError
Я попытался тестируем в оболочке с некоторыми простыми условными выражениями как это:
>>> str = 'hello'
>>> raise len(str) == 5 or AssertionError
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
raise len(str) == 5 or AssertionError
TypeError: exceptions must be classes, instances, or strings (deprecated), not bool
Так судя этого теста, по крайней мере, как я попробовал это, вы не можете поднять логическое утверждение. Что значит поднять условное выражение тогда и почему оно работает в функции __init__
, но не в моем тестовом коде?
Этот шаблон делает ** нет смысла ** вообще. –
Единственный способ использовать условное выражение, когда 'raise'-ing будет, например. 'raise SomeError, если условие else AnotherError', но это кажется бесполезным сбивающим с толку. – jonrsharpe