如果否则引发 ValueError

if else to raise a ValueError

我正在关注这个:

if else in a list comprehension

但是下面的小程序产生了一个语法错误:

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 的 rna 转录问题。

我通过了 5 个单元测试,但是我没有通过需要 ValueError 无效输入的三个单元测试。

你不能在理解中做到这一点。条件表达式的形式为:

expr if expr else expr

(而且,分注,理解开头要用)

while raise ExceptionClass is a statement,不是表达式。因此,引发了 SyntaxError

简而言之,如果您确实想使用 raise,则必须求助于 for 循环。


或者,如果您非常热衷于理解,则可以定义一个函数,然后可以在 else 子句中调用该函数:

def raiser(exc_type):
    raise exc_type

这是因为函数调用是表达式。当然,这是相当丑陋的。