处理异常后恢复的Pythonic方法

2024-09-28 23:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个操作物理设备的脚本。有一个设备上的物理故障,有时会发生,当它这样做,我想重置设备,并继续与脚本。我有这个:

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

在我看来,更整洁/更具Python风格的方法会引发一个例外:

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

except DeviceFaultException:
    reset_device()

但据我所知,重置设备后无法恢复脚本。有没有一种方法可以让异常处理在这种情况下工作,或者有一种比我目前使用的更为python的方法?你知道吗


Tags: 方法脚本truegetifdevicestatus物理
1条回答
网友
1楼 · 发布于 2024-09-28 23:37:08

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

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

这应该得到与使用if语句的原始代码块中的内容类似的行为。你知道吗

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

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

当然,只有当do_device_control函数抛出某种异常或对其进行更改时,这个示例才有效。如果您不能期望/更改此行为,则首选使用If语句的第一个代码块,而不是显式引发异常,以便在同一代码块中立即捕获它。你知道吗

相关问题 更多 >