Вы можете сделать что-то подобное:
def typeoferror(mybytes):
return [
len(mybytes) != 8,
any(True for i in mybytes if i not in [0,1])
]
, а затем использовать его для тестов:
if typeoferror(mybytes)[0] and typeoferror(mybytes)[1]:
raise ValueError('Is not 8-items long and has elements other than 0 or 1')
elif typeoferror(mybytes)[0]:
raise ValueError('Is not 8-items long')
elif typeoferror(mybytes)[1]:
raise ValueError('Has elements other than 0 or 1')
Тот же код в действии: http://codepad.org/tih9ewKq
Конечно, вы можете кэшировать результат функции typeoferror()
, чтобы повысить производительность.
Это то, что вы просили?
EDIT:
Решение стало более эффективным, как предложено agf .