簡體   English   中英

python 出錯重啟循環

[英]Restarting a Loop if an error occurs in python

我在使用一個腳本時遇到了一些問題,該腳本在運行 1000 次時會產生大約 1 次的 IndexError。

該腳本是我無法實際編輯的軟件的附加組件,否則它會使我使用它的外部軟件崩潰。

我從我自己的腳本中多次調用此腳本,有什么方法可以檢測是否發生錯誤並循環返回以嘗試再次運行腳本? (腳本有多個隨機元素,這就是重復失敗的風險很低的原因)。 我更願意將 go 添加到腳本中並手動編輯它,但這似乎不是一個選項

我有以下使用 PYPI goto 語句 ( https://pypi.org/project/goto-statement/ ) 並使用 except,但是錯誤似乎沒有被識別,我得到了與沒有goto 或 except 語句。

def function (stuff thats passed into the other script):
    for i in range(5000):
        print(i)
        try:
            runscript (info passed into script) 
        except IndexError:
            print(i,'fails')
            continue

這有很多問題,讓 go 解決它:

from goto import with_goto

您應該避免使用goto ,因為它會導致奇怪的代碼時間線,並使您的代碼難以閱讀或理解。

def function:

你忘了你的括號,它應該看起來像def function():

for i in range(5000):

將其替換為 while i < 5000

print(i,'fails')

如果您試圖發出錯誤消息,請使用raise()

i=i+1

在 python for循環中,它會自動遞增。

你能……只是……不嗎?

def func():
  for i in range(5000):
    try:
      runscript
    except IndexError:
      return False
  return True

while not func():
  pass

這將運行您的runscript直到它設法連續執行 5000 次運行腳本,但它沒有任何奇怪的字節碼操作。 還有其他方法:

successes = 0
while successes < 5000:
  try:
    runscript
    successes += 1
  except IndexError:
    successes = 0

應該清楚,這是一個基於該頁面底部引用的 Bad Idea™:

goto in Python 的想法並不新鮮。 還有一個模塊是在 2004 年作為愚人節玩笑發布的。

如果您嘗試使用最初作為愚人節玩笑發布的內容,可能有更好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM