如果否则引发 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
这是因为函数调用是表达式。当然,这是相当丑陋的。
我正在关注这个:
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
这是因为函数调用是表达式。当然,这是相当丑陋的。