Python:不允许我引发异常。还有其他优雅的python方式吗?

标签 python exception raise

我的工作场所规定不得使用异常(允许捕获)。如果我有这样的代码

def f1()
 if bad_thing_happen():
   raise Exception('bad stuff')
 ...
 return something

我可以把它改成

def f1()
  if bad_thing_happen():
    return [-1, None]
  ...
  return [0, something]

f1 调用者会是这样

def f1_caller():
  code, result = f1(param1)
  if code < 0:
    return code
  actual_work1()
  # call f1 again
  code, result = f1(param2)
  if code < 0:
    return code
  actual_work2()
  ...

在 Python 中还有比这更优雅的方法吗?

最佳答案

python 中的异常是无法避免的,并且通常是解决问题的直接方法。此外,异常携带大量信息,可以帮助快速定位(通过堆栈跟踪)和识别问题(通过异常类或消息)。

想出这个一揽子政策的人肯定在考虑另一种语言(也许是 C++?),其中抛出异常是一种更昂贵的操作(如果您的代码在 20 年前的计算机上执行,将会降低性能)。

回答您的问题:另一种方法是返回错误代码。这意味着您将函数结果与错误处理混合在一起,这会引发(哈!)它自己的问题。但是,返回 None 通常是指示函数失败的一种非常合理的方式。

关于Python:不允许我引发异常。还有其他优雅的python方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869326/

相关文章:

Python sqlparse 没有正确地为每一列创建新行

python - 从索引为 08 或 09 的列表中获取值时出错

silverlight - 绑定(bind)完成后如何引发事件?

java - 异常情况下返回返回类型的规则

python - 如何报告异常以备后用

python - 将一列数据帧转换为基于其他列的 numpy 数组或张量

python -/Applications/Xcode.app/Contents/Developer/usr/bin/python3 : No module named notebook

php - 如何获取错误代码的文本?

Java8 Stream .orElseThrow 未报告的异常错误