Если еще поднять 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
Это потому, что вызовы функций являются выражениями. Конечно, это довольно некрасиво.