python程式報錯後除了try except之外有沒有好的辦法再次啟動?

時間 2021-05-31 12:08:55

1樓:

最近遇到了跟題主一樣的問題,現在找到了答案:

引入retrying庫,加乙個裝飾器

import

random

from

retrying

import

retry

@retry

defdo_something_unreliable():if

random

.randint(0

,10)>1:

raise

IOError

("Broken sauce, everything is hosed!!!111one"

)else

:return

"Awesome sauce!"

print

do_something_unreliable()程式會一直重新執行,直到順利執行。

見Python中異常重試解決方案 - 標點符另外,retry支援Python3,retrying只支援Python2

2樓:

if __name__ == '__main__':

while 1:

try:

go()

except Exception as e:

go()

這個是我的解決辦法,

這個只適用於不關心錯誤,返回結果的只要指令碼一直跑的任務....

額.剛剛跑一會還是有可能掛掉.

新版本def main():

while 1:

try:

go()

except Exception as e:

main()

time.sleep(1)

if __name__ == '__main__':

main()

還在測試

3樓:jamesr

不存在乙個可以修復自己所有錯誤的系統。

仔細想想這句話,這意味著的,如過所有錯誤都能修復,則系統應該是沒有錯誤,也就和修復錯誤矛盾。

正確的做法就是:借助系統外工具還原錯誤現場,然後修復已經發現的錯誤。在錯誤的發現和修復的間隙,不是讓系統繼續執行(系統內嘗試修復),而是直接掛掉,並借助系統外工具重啟,以回到乙個確定還是正確的狀態執行。

4樓:豬了個去

再次啟動有很多種方案啊,但最關鍵的問題是:這樣的啟動是你需要的嘛?

一開始就註冊atexit函式。這種以Celery的重啟機制為例。實質上就是atexit上註冊乙個os.execv,重新執行當前的python指令碼

使用程序守護工具supervisord ->是Python的那個工具,而不是centos那個supervisor,當然後者也可以。程序守護無非都是檢測子程序的退出狀態

更大的try catch

生產環境通常用2,但在頻繁退出(達到重試次數)的情況下,也是會停止重試的。

不處理無法預知後果的異常,大包大攬不如顯式失敗。。。

5樓:WoodenRobot

今天剛寫了乙個。

max_num = 0

while True:

trybreak

except Exception as emax_num += 1if max_num <= 3else如果重試3次後仍然出錯,則跳出break

6樓:依雲

你是想要我的 restart_if_failed 函式? https://

7樓:

是想遇錯重試?

比較直接的:定義乙個計數變數,將處理函式的呼叫放在乙個迴圈裡,以計數變數與最大重試次數作為迴圈控制。捕捉到處理異常後,清理現場同時計數加1,進入下次迴圈。處理成功則跳出迴圈。

python 讀取excel報錯,煩請解答?

233 這是檔案頭無法識別,你可以用記事本開一下那個excel檔案看看和正常的差異。其實沒太懂為什麼這麼喜歡用python讀excel,csv不香嗎 jefxff 首先,報錯提示的是格式不正確或者檔案已損壞。所以我猜可能出現的問題是 檔案本身內容問題 比如插入了乙個中文字元或者什麼的 檔案沒問題,庫...

Python如何優雅地解決2 0的報錯?

流星的宇 你得看是什麼需求,使用的範圍啊,最簡單的直接判斷分母,如果範圍大,就單獨寫個工具函式,如果是類裡邊的運算,就把 div 給改寫了不就行了,你這上下文沒給,空談優雅沒意義的 369685930 定乙個運算元class,重寫 div 方法,然後在此方法中try一下捕獲除以零的那種異常,並處理一...

brew公升級後ruby報錯怎麼辦?

姜宇航 git reset hard FETCH HEADgit clean df brew update 如果 brew update 提示 git pull 失敗提示 failed while git pull 之類,試試用 git checkout Library 替換新檔案 cd usr l...