如果 python 中发生错误,则重新启动循环

Restarting a Loop if an error occurs in python

我在使用脚本时遇到了一些问题,该脚本产生的 IndexError 大约是 运行 的 1000 倍。

该脚本是我无法实际编辑的一款软件的附加组件,否则它会使我使用它的外部软件崩溃。

我从我自己的脚本中多次调用此脚本,有什么方法可以检测是否发生错误并循环返回以再次尝试 运行 调用脚本? (脚本有多个随机元素,这就是重复失败的风险很低的原因)。我更愿意进入附加脚本并手动编辑它,但这似乎不是一个选项

我有以下使用 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

这里有很多不妥之处,让我们回顾一下:

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

在pythonfor循环中,它会自动递增。

你能……只是……不行吗?

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™:

The idea of goto in Python isn't new. There is another module that has been released as April Fool's joke in 2004.

如果您尝试使用最初作为愚人节玩笑发布的内容,可能更好的方法。