我跟着这个:
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。
答案 0 :(得分:3)
你不能理解这一点。条件表达式的格式为:
expr if expr else expr
(并且,注意,它应该在理解的开头使用)
虽然raise ExceptionClass
is a statement,但不是表达式。因此,SyntaxError
被提升。
简而言之,如果您确实想使用raise
,则必须使用for
循环。
或者,如果您对理解非常热衷,可以定义一个函数,然后可以在else
子句中调用:
def raiser(exc_type):
raise exc_type
这是因为函数调用是表达式。当然,这很难看。