溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中try finally不報錯怎么辦

發(fā)布時間:2020-07-23 15:31:20 來源:億速云 閱讀:163 作者:小豬 欄目:開發(fā)技術

這篇文章主要講解了python中try finally不報錯怎么辦,內(nèi)容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

因為有把python程序打包成exe的需求,所以,有了如下的代碼

import time

class LoopOver(Exception):
  def __init__(self, *args, **kwargs):
    pass

class Spider:
  def __init__(self):
    super().__init__()

  def run(self):
    raise LoopOver

  @property
  def time(self):
    return '總共用時:{}秒'.format(self.runtime)


if __name__ == '__main__':
  try:
    spider = Spider()
    spider.run()
    print(spider.time) # 運行總時間
  finally:
    print('死掉了')
    time.sleep(60 * 60)

但是遇到了一個問題

程序顯示“死掉后”并不會顯示堆棧的錯誤信息

python中try finally不報錯怎么辦

排查后發(fā)現(xiàn),程序打印“堆棧的錯誤信息”并不是異步的,“堆棧的錯誤信息”會等到finally內(nèi)的代碼塊執(zhí)行完畢后才會輸出

所以,把代碼塊改一下,
需要導入traceback庫來跟蹤堆棧的錯誤信息
如下所示

import time
import traceback


class LoopOver(Exception):
  def __init__(self, *args, **kwargs):
    pass


class Spider:
  def __init__(self):
    super().__init__()

  def run(self):
    raise LoopOver

  @property
  def time(self):
    return '總共用時:{}秒'.format(self.runtime)


if __name__ == '__main__':
  try:
    spider = Spider()
    spider.run()
    print(spider.time) # 運行總時間
  finally:
    traceback.print_exc()
    print('死掉了')
    time.sleep(60 * 60)

這種打印方式是異步的,不知道是多線程還是協(xié)程還是啥

python中try finally不報錯怎么辦

看完上述內(nèi)容,是不是對python中try finally不報錯怎么辦有進一步的了解,如果還想學習更多內(nèi)容,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI