繁体   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