调用函数传入无效选项参数时应抛出何种Python内置异常?
选用Python内置异常的建议
在这个场景下,应该用ValueError替代Exception,这是最贴合的选择。
原因很简单:ValueError的设计初衷就是处理「参数类型正确,但值不符合预期范围/要求」的情况。你的代码中,reduction参数是字符串类型(符合类型要求),但传入的值不在允许的["mean", "sum", "none"]集合里,完全符合ValueError的适用场景。
其他内置异常都不适合:
TypeError用于参数类型错误(比如传入数字而非字符串),和当前情况不匹配;LookupError及其子类(如KeyError)用于查找操作失败,也不符合这里的参数校验场景;- 直接抛出
Exception是不推荐的,因为它是所有非系统退出异常的基类,会捕获大量无关异常,不利于精准调试和错误处理。
修改后的代码如下:
#!/usr/bin/env python3 from torch import Tensor from typing import Literal def reduce(x: Tensor, reduction: Literal["mean", "sum", "none"] = "mean") -> Tensor: if reduction == "mean": return x.mean() elif reduction == "sum": return x.sum() elif reduction == "none": return x else: raise ValueError(f"Invalid choice: {reduction!r}.")
内容的提问来源于stack exchange,提问作者codersblock
相关产品推荐
相关产品推荐

