如何正确设置python计数器?当前的逻辑出了什么问题


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。您的代码似乎能满足您的要求。如果没有,请提供澄清。

最新更新