Если еще поднять ValueError

Я слежу за этим:

если еще в понимании списка

но следующая небольшая программа генерирует синтаксическую ошибку:

def to_rna(dnasequences):
    xlate = {'G': 'C', 'C': 'G', 'T': 'A', 'A': 'U'}
    return ''.join(xlate[sequence] for sequence in dnasequences if sequence in xlate.keys() else raise ValueError)

Предложение else генерирует ошибку.

Однако если я удалю предложение else, которое оно запускает, я хочу вызвать ValueError для любого ввода, который НЕ является ключом в моем словаре 'xlate'.

ПРИМЕЧАНИЕ. Я работаю над проблемой РНК-транскрипции из exercism.io.

Я прошел 5 модульных тестов, но не прошел три модульных теста, требующих ошибки ValueError для неверного ввода.

1 ответ

Решение

Вы не можете сделать это в понимании. Условное выражение имеет вид:

expr if expr else expr

(и, подпункт, он должен быть использован в начале понимания)

в то время как raise ExceptionClass это утверждение, а не выражение. Как таковой, SyntaxError Поднялся.

Короче говоря, если вы хотите использовать raiseвам придется прибегнуть к for петля.


С другой стороны, если вы просто очень увлечены пониманием, вы можете определить функцию, которую затем можете вызвать в else пункт:

def raiser(exc_type):
    raise exc_type

Это потому, что вызовы функций являются выражениями. Конечно, это довольно некрасиво.

Другие вопросы по тегам