Python - Как вызвать ошибку значения нескольких элементов в списке - PullRequest
1 голос
/ 17 августа 2011

Если у меня есть список элементов, который в конечном итоге будет двоичным числом, как мне заставить программу сказать значение ошибки (или что-то подобное), когда список длиннее 8 чисел, а не 1 илиa 0 ???

т.е. [1,0,2,0,1,0,0,0,1] Это должно привести к ошибке, говоря, что список имеет номер не 1 или 0 и его больше, чем8 цифр.

Ответы [ 3 ]

1 голос
/ 17 августа 2011
if len(my_list) > 8 or any((x is not 0) and (x is not 1) for x in my_list):
    raise ValueError

Не создает промежуточный список и останавливается на первом неверном номере (а также работает с числами короче восьми цифр).

Если вы хотите, чтобы принял значения, такие как True для 1 или False для 0,

if len(my_list) > 8 or any(x in (0, 1) for x in my_list):
    raise ValueError

работает так же.

1 голос
/ 17 августа 2011

Это сделает это. Насколько это чисто, как вы хотите, зависит от вас:

if len(l1) != 8 or len([n for n in l1 if n not in (1, 0)]) != 0:
  raise ValueError('Invalid entries or incorrect length')
0 голосов
/ 17 августа 2011

Вы можете сделать что-то подобное:

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...