我有一个操作物理设备的脚本。有一个设备上的物理故障,有时会发生,当它这样做,我想重置设备,并继续与脚本。我有这个:
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的方法?你知道吗
一个常见的Python成语是“请求宽恕而不是允许”,这非常适用于你的问题。下面这样的实现就足够了:
这应该得到与使用if语句的原始代码块中的内容类似的行为。你知道吗
但是,您可能注意到我没有检查代码中的
device_status
。这是因为如果do_device_control
函数无法完成其任务,则应该允许它引发异常。这允许您在执行操作时处理异常。你知道吗在使用与代码异步运行的设备的环境中,可以检查设备状态,这样就可以了。然后它可能会在检查和
do_device_control
函数之间失败。这就是为什么存在“请求宽恕而不是允许”范式的一个例子。你知道吗当然,只有当
do_device_control
函数抛出某种异常或对其进行更改时,这个示例才有效。如果您不能期望/更改此行为,则首选使用If语句的第一个代码块,而不是显式引发异常,以便在同一代码块中立即捕获它。你知道吗相关问题 更多 >
编程相关推荐