def set_attribute(attributes, name, value):
for i, attribute in enumerate(attributes):
if name in attribute:
quote_char = attribute.find('"')
if quote_char == -1:
raise ValueError
return None
attributes[i] = attribute[:quote_char+1] + str(value) + '"'
return attributes
我是一名新程序员,我正在尝试正确理解异常处理。
在这个例子中,每个地方name
也应该有一个"
字符,所以如果失败,我想引发一个异常,但我也试图了解该return None
语句是否必要(或做任何事情)。
我的理解是,在找到异常处理程序之前,我会逃离每个级别的范围。Python教程是这样说的:
- 首先,执行 try 子句(try 和 except 关键字之间的语句)。
- 如果没有发生异常,则跳过 except 子句并完成 try 语句的执行。
- 如果在 try 子句执行期间发生异常,则跳过该子句的其余部分。然后如果它的类型与以 except 关键字命名的异常匹配,则执行 except 子句,然后在 try 语句之后继续执行。
- 如果在 try 子句执行期间发生异常,则跳过该子句的其余部分。然后如果它的类型与以 except 关键字命名的异常匹配,则执行 except 子句,然后在 try 语句之后继续执行。
- 如果发生与 except 子句中指定的异常不匹配的异常,则将其传递给外部 try 语句;如果没有找到处理程序,则它是一个未处理的异常,并且执行停止并显示如上所示的消息。
然而,在阅读了这个描述之后,我意识到我不理解异常,但我应该。
所以简单地陈述这个问题:这个return None
陈述是否必要,为什么?另外,我对异常的工作方式有什么误解?