如果出现任何错误,是否可以 运行 在循环中尝试语句?
Is it possible to run try statement in a loop if any error comes?
如果出现错误,它会转到 try
语句之后的 except
语句,程序在此结束。我的问题是,是否有可能,如果出现错误,那么它会在不结束程序的情况下连续运行 try 语句?
例如:
try:
some error caught
except:
go to try statement again
并且这个在链中连续运行?
只要创建一个循环,如果没有异常发生就中断
while True:
try:
some_code_that_might_fail
except Exception: # catch all potential errors
continue # if exception occured continue the loop
break # if no exception occured break out of the loop
请尝试以下示例:
while True:
try:
num = int(input("please enter a number"))
print("The number is ", num)
rec = 1 / num
except Exception:
print("either you entered no number or 0 (or some other error occured)")
continue # if any exception occured continue the loop
break # if no exception occured break out of the loop
print("1 / %f = %f" % (num, rec))
如 B运行o 所述。
通常(这就是我在自己的代码中所做的)不建议捕获所有异常。
您应该只显式捕获已知异常
附录 2020-04-17
看了你的回答,我觉得你的问题有点误导。
也许你的问题是,你有一个函数,你想永远运行。
但是有时函数会终止(由于错误)而不会引发异常。
如果是这样就写:
while True:
afunc()
print("function terminated. I will restart it")
但请注意,您的程序永远不会终止。
或者如果该函数有时会引发异常,有时不会但只是终止,并且您想在函数失败或终止时调用该函数,那么就这样做。
while True:
try:
afunc()
print("function terminated without exception")
except Exception:
pass
print("function encountered an exception")
print("will restart")
如果你愿意,该函数可以终止并且你有办法查明它是否是一个错误,那么你可以这样做:
while True:
try:
afunc()
if i_know_that_func_terminated_correctly():
print("function terminated correctly")
break
print("function terminated without an error")
except Exception:
pass
print("function terminated with an exception")
print("restarting")
我添加了用于调试/可视化的打印语句。如果不需要,只需删除它们或评论它们。 (这也是我留下 pass
声明的原因
在 except
子句中)
如果出现错误,它会转到 try
语句之后的 except
语句,程序在此结束。我的问题是,是否有可能,如果出现错误,那么它会在不结束程序的情况下连续运行 try 语句?
例如:
try:
some error caught
except:
go to try statement again
并且这个在链中连续运行?
只要创建一个循环,如果没有异常发生就中断
while True:
try:
some_code_that_might_fail
except Exception: # catch all potential errors
continue # if exception occured continue the loop
break # if no exception occured break out of the loop
请尝试以下示例:
while True:
try:
num = int(input("please enter a number"))
print("The number is ", num)
rec = 1 / num
except Exception:
print("either you entered no number or 0 (or some other error occured)")
continue # if any exception occured continue the loop
break # if no exception occured break out of the loop
print("1 / %f = %f" % (num, rec))
如 B运行o 所述。 通常(这就是我在自己的代码中所做的)不建议捕获所有异常。
您应该只显式捕获已知异常
附录 2020-04-17
看了你的回答,我觉得你的问题有点误导。 也许你的问题是,你有一个函数,你想永远运行。 但是有时函数会终止(由于错误)而不会引发异常。
如果是这样就写:
while True:
afunc()
print("function terminated. I will restart it")
但请注意,您的程序永远不会终止。
或者如果该函数有时会引发异常,有时不会但只是终止,并且您想在函数失败或终止时调用该函数,那么就这样做。
while True:
try:
afunc()
print("function terminated without exception")
except Exception:
pass
print("function encountered an exception")
print("will restart")
如果你愿意,该函数可以终止并且你有办法查明它是否是一个错误,那么你可以这样做:
while True:
try:
afunc()
if i_know_that_func_terminated_correctly():
print("function terminated correctly")
break
print("function terminated without an error")
except Exception:
pass
print("function terminated with an exception")
print("restarting")
我添加了用于调试/可视化的打印语句。如果不需要,只需删除它们或评论它们。 (这也是我留下 pass
声明的原因
在 except
子句中)