【发布时间】:2019-03-06 10:03:00
【问题描述】:
为了检查一个方法是否被正确调用,我想检查每个字符,使程序员不可能错误地使用该方法。因为该方法将在 Web 服务器中以return redirect(...) 的形式调用,而不是返回错误值(如False 或None),所以我想引发异常。
def redirect(uri):
[raise ValueError('URI must be URL-encoded, ASCII only!') for c in uri if not (32 <= ord(c) <= 127)]
这给出了“无效语法”异常:
File "server.py", line 115
[raise ValueError('URI must be URL-encoded, ASCII only!') for c in uri if not (32 <= ord(c) <= 127)]
^
SyntaxError: invalid syntax
我可以通过各种方式解决这个问题,但我想知道:为什么不允许在列表推导式中进行提升?
【问题讨论】:
-
拥有一个带有引发异常的列表作为元素意味着什么?
-
@Neb
raise关键字不会引发异常吗?它永远不会出现在列表中,因为它在找到except语句之前会脱离该函数。要将例外作为列表中的元素,我会使用[ValueError(...) for c in uri if ...])。 -
是的,确实如此。但是,我想知道,你为什么要把它放在一个列表中?不列清单就不能提出来吗?
-
@Neb 当然,
for c in uri:\n\tif ...:\n\t\traise ValueError(...)可以,但我想知道 为什么 raise 在列表理解中是不允许的。 -
要知道为什么,看看这个答案stackoverflow.com/questions/1528237/…。
标签: python-3.x syntax-error list-comprehension