gpt4 book ai didi

处理异常后恢复的 Pythonic 方式

转载 作者:行者123 更新时间:2023-12-03 18:36:11 29 4
gpt4 key购买 nike

我有一个正在操裁剪理设备的脚本。设备有时会发生物理故障,当它发生时,我想重置设备并继续执行脚本。我有这个:

while True:
do_device_control()
device_status = get_device_status()
if device_status == 'Fault':
reset_device()

在我看来,更简洁/更 Pythonic 的方法会引发异常:

try:
while True:
do_device_control()
device_status = get_device_status()
if device_status == 'Fault':
raise DeviceFaultException()

except DeviceFaultException:
reset_device()

但据我所知,重置设备后无法恢复脚本。有没有办法让异常处理适用于这种情况,或者比我目前使用的方法更 Pythonic 的方法?

最佳答案

一个常见的 Python 习语是“请求宽恕而不是许可”,这非常适用于您的问题。像下面这样的实现就足够了:

while True:
try:
do_device_control()
except DeviceFaultException:
reset_device()

这应该得到与使用 if 语句的原始代码块中的行为类似的行为。

但是,您可能注意到我没有检查代码中的 device_status。这是因为您应该允许 do_device_control 函数在无法完成其任务时引发异常。这允许您在执行操作时处理异常。

在您使用与您的代码异步运行的设备的环境中,您可以检查设备状态并且一切正常。然后它可能会在检查和您的 do_device_control 函数之间失败。这是为什么存在“请求宽恕而不是许可”范式的一个例子。

当然,此示例仅在您可以预期 do_device_control 函数抛出某种异常或更改它以使其抛出异常时才有效。如果您不能期望/更改此行为,那么您的第一个带有 if 语句的代码块将比显式引发异常以立即在同一代码块中捕获它更可取。

关于处理异常后恢复的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59023710/

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