def some_func():
success_count = 0
fail_count = 0
try:
do_this_thing()
success_count += 1
fail_count = 0
print(f"success count is {success_count}.")
except this_error:
fail_count += 1
success_count = 0
print(f"retrying. retried {fail_count} times.")
这就是我的代码结构。除了successcount和failcount之外,其他一切都很正常。id期望每次运行try函数时都重置success_count,当遇到异常时重置success-count,输出如下所示。
success count is 1.
success count is 2.
success count is 3.
retrying. retried 1 times.
retrying. retried 2 times.
success count is 1.
success count is 2.
但我得到了:
success count is 1.
success count is 2.
success count is 3.
retrying. retried 1 times.
retrying. retried 2 times.
success count is 4.
success count is 5.
当前的逻辑出了什么问题?为什么success_count没有被重置。
编辑:下面的代码是为了重新创建问题,而且测试代码运行得很好。然而,我的真实代码,使用相同的结构却没有。现在我更困惑了。
import time
import random
def randomly_raise_except_func():
k = random.randint(1,2)
if k == 1:
pass
if k == 2:
raise ValueError("this is a error to recreate the problem")
def some_func():
success_count = 0
fail_count = 0
while True:
try:
randomly_raise_except_func()
success_count += 1
fail_count = 0
print(f"success count is {success_count}.")
time.sleep(2)
except ValueError:
fail_count += 1
success_count = 0
print(f"retrying. retried {fail_count} times.")
time.sleep(2)
continue
some_func()
我添加了这一行:
random.seed(22) # set a seed, so that results are reproducible
之前
some_func()
所以我得到了输出:
success count is 1.
success count is 2.
success count is 3.
retrying. retried 1 times.
success count is 1.
success count is 2.
retrying. retried 1 times.
success count is 1.
success count is 2.
...
这在我看来很好:每次发生异常时,成功计数器都会重置为0。您的代码似乎能满足您的要求。如果没有,请提供澄清。