在 Python 中提出赋值异常是不好的做法吗?

is raising exceptions on assignment bad practise in python?

提问人:accidental_denver 提问时间:7/8/2023 最后编辑:accidental_denver 更新时间:7/8/2023 访问量:41

问:

考虑以下示例,其中我必须将许多变量分配给可能返回 None 的函数调用。如果它们确实返回 None,则必须引发异常。

some_variable = some_function_call()

if not some_variable:
    raise AnException(...)

一遍又一遍地这样做最终会变得乏味且难以阅读。 我应该有没有其他方法可以避免所有这些?if not x: raise Exc

写这样的东西会是不好的做法吗?如果是这样,为什么?

def raise_exception(exc):
    raise exc

some_variable = some_function_call() or raise_exception(AnException())
python-3.x 错误处理

评论

0赞 trincot 7/8/2023
你可以使用assert ( some_variable := f() ), "my error message"
1赞 mkrieger1 7/8/2023
除非启用优化。
1赞 user2390182 7/8/2023
是的,我不会用于业务逻辑assert
0赞 user2390182 7/8/2023
必须这么早提出来吗?可能使用后者会引发 or 无论如何。NoneTypeErrorAttributeError
0赞 Samwise 7/8/2023
如果您拥有 ,您可以考虑让该函数本身在错误时引发异常,而不是返回 。当然,这很大程度上取决于函数的实际操作,但是如果结果可能会在调用方中产生错误,最好立即提出 IMO,这样调用方就不需要检查和提出自己的错误,因为您必须在这里这样做。some_function_callNoneNoneNone

答:

0赞 user2390182 7/8/2023 #1

你的方法本身没有错。也许赋值表达式更具可读性:

if not (some_variable := some_function_call()):
    raise AnException(...)

评论

0赞 accidental_denver 7/8/2023
像这样的东西就是我一直在寻找的。就像你说的比我写的更清楚。谢谢你。