如何使用raise抛出ValueError?为何程序触发一次异常就终止遍历?
问题解答
一、为什么程序只触发一次异常就停止?
Python中,当未被捕获的异常抛出时,程序会立即终止执行,不会继续后续的循环迭代。你的代码遍历到第三个元素79(奇数)时,isitDoubleorSingle函数抛出了ValueError,但整个循环过程中没有任何代码捕获这个异常,所以程序直接停止,后面的43、11等奇数根本没机会被处理,自然只触发一次异常。
二、如何实现触发4次异常并完成遍历?
要让程序遍历所有元素并触发所有该触发的异常,需要用try-except语句捕获异常,这样每次抛出异常后,程序会执行except块的逻辑,然后继续下一次循环。
修改后的代码示例
def isitDoubleorSingle(value): if value % 2 != 0: raise ValueError("Number isn't double") print(value) num_list = [10,22,79,43,11,80] # 避免用list做变量名,它是Python内置类型 for x in num_list: try: isitDoubleorSingle(x) except ValueError as e: print(f"捕获到异常: {e}")
raise抛出ValueError的用法
- 标准用法:
raise ValueError("自定义错误提示信息"),直接抛出指定类型的异常,同时附带便于调试的错误描述。 - 极简用法:
raise ValueError,仅抛出异常类型,但无错误信息,不推荐用于实际调试。 - 重新抛出异常:在
except块中使用raise,可以将捕获到的异常重新向上抛出,但这会终止程序,除非外层还有try-except捕获逻辑。
内容的提问来源于stack exchange,提问作者Rixy
相关产品推荐
相关产品推荐

