Python中的"or die()

68 投票
7 回答
122280 浏览
提问于 2025-04-16 21:42

有没有人用过像这样的东西在Python里:

def die(error_message):
    raise Exception(error_message)

...

check_something() or die('Incorrect data')

我觉得这种风格在PHP和Perl里是常见的。

你觉得这种[风格]有什么优缺点吗?

7 个回答

27

虽然这种写法在PHP和Perl中很常见,但在Python中就显得不太合适,我建议你不要这样写Python代码。你应该遵循你所使用语言的惯例,写成下面这样:

if not check_something():
    raise Exception('Incorrect data')

顺便说一下,使用“or die(...)"这种写法会让你的错误追踪信息多出一层,这也是一个小缺点。

51

很多人给出了很好的答案,但还没有人提到用Python写这个的明显方法:

assert check_something(), "Incorrect data"

不过要注意,如果你开启了优化,这个检查就不会执行了,不过其实很少有人会这样做。

90

首先,sys.exit([arg]) 是更常用的方法。如果你想要在Python中实现类似PHP的 die 功能,应该使用这个,或者抛出一个SystemExit 错误,或者调用os._exit

在PHP中,die 方法的主要用途是表示“脚本遇到了无法恢复的障碍”。在实际的生产代码中,这种用法很少见。更好的做法是在被调用的函数中抛出一个异常,然后在父函数中捕获这个异常,找到一个优雅的退出点——这在两种语言中都是最好的方式。

撰写回答