gpt4 book ai didi

python - 冒泡错误条件的pythonic方法是什么

转载 作者:太空狗 更新时间:2023-10-30 00:36:04 24 4
gpt4 key购买 nike

我一直在做一个 Python 项目,这个项目已经变得有些大,并且有多层功能。由于一些愚蠢的早期决定,我发现我必须修复很多崩溃,因为较低级别的函数正在返回一个我在较高级别函数中不期望的类型(通常是 None)。

在进行清理之前,我想知道指示错误条件并在更高函数中处理它们的最 pythonic 方式是什么?

我一直在做的大部分事情是,如果函数无法完成并返回其预期结果,我将返回 None。这有点恶心,因为您最终必须始终检查所有调用它的函数中的 None 。

def lowLevel():
## some error occurred
return None

## processing was good, return normal result string
return resultString

def highLevel():
resultFromLow = lowLevel()
if not resultFromLow:
return None

## some processing error occurred
return None

## processing was good, return normal result string
return resultString

我想另一个解决方案可能是抛出异常。这样一来,您仍然可以在调用函数中获得大量代码来处理异常。

没有什么看起来 super 优雅。其他人用什么?在 obj-c 中,一个常见的模式是通过引用返回一个错误参数,然后调用者检查它。

最佳答案

这实际上取决于您想如何处理无法完成的处理。如果这些真的是普通控制流的异常,并且您需要清理、救助、给别人发电子邮件等,那么异常就是您想要抛出的。在这种情况下,处理代码只是必要的工作,基本上是不可避免的,尽管您可以重新抛出堆栈并在一个地方处理错误以保持整洁。

如果可以容忍这些错误,那么一种优雅的解决方案是使用 Null Object图案。不是返回 None,而是返回一个对象,该对象模仿通常会返回的真实对象的接口(interface),但不执行任何操作。这允许故障下游的所有代码继续运行,而无需注意发生故障的事实。这种模式的主要缺点是它很难发现真正的错误,因为您的代码不会崩溃,但在运行结束时可能不会产生任何有用的东西。

Python 中 Null Object 模式的一个常见示例是当您的低级函数出现空值时返回一个空列表或字典。任何使用此返回值并遍历元素的后续函数都将静默失败,无需进行错误检查。当然,如果出于某种原因您要求列表至少有一个元素,那么这将不起作用,您将再次返回处理异常情况。

关于python - 冒泡错误条件的pythonic方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23797825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com