无异常时执行

11 投票
2 回答
16583 浏览
提问于 2025-04-16 22:43

我有一些代码想在没有发生异常的情况下执行。

现在我这样做:

try:
    return type, self.message_handlers[type](self, length - 1)
finally:
    if not any(self.exc_info()):
        self.last_recv_time = time.time()

这样做可以改进吗?这是最好的方法吗?

更新0

可选的else部分会在try部分的代码执行完毕后运行。

目前,只有在发生异常、或者执行了return、continue或break语句时,控制才不会“流出”这个try部分的末尾。

2 个回答

28

在编程中,很多时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。我们需要确保水不会洒出来,也就是数据不会丢失。

有时候,我们会遇到一些问题,比如数据格式不对,或者数据不完整。这就像是水桶的形状不一样,导致水倒不进去。为了避免这些问题,我们需要提前检查数据,确保它们是可以使用的。

另外,编程中还有一个很重要的概念就是“函数”。可以把函数想象成一个机器,你把原料放进去,机器就会给你一个成品。这样我们就可以重复使用这些“机器”,让编程变得更简单。

总之,处理数据就像是搬运水,确保水的质量和数量是非常重要的,而函数则是帮助我们更高效地完成这个工作的工具。

try:
   tmp = type, self.message_handlers[type](self, length - 1)
except Exception:
   pass #or handle error, or just "raise" to re-raise
else:
   self.last_recv_time = time.time()
   return tmp
9

你的代码看起来是你不想处理发生的错误,那为什么不直接这样做呢

result = type, self.message_handlers[type](self, length - 1)
self.last_recv_time = time.time()
return result

(我是不是漏掉了什么?)

撰写回答