为什么以下函数返回False?
我正在将pytesseract
用于lackey
的字符识别(OCR)。如果OCR失败,则应根据某些条件(例如字符串太短),使用不同的参数(用于图像处理)重试。由于我需要将此机制应用于不同的功能,因此我使用了带参数的装饰器。
我写了一个简化的版本,其中['a', 'b', 'c', 'd']
代表c
的图像处理参数列表。如果全部失败,则会引发异常。
from functools import wraps
def try_another_way(my_list):
def outer(callback):
@wraps(callback)
def closure(i=0, *args, **kwargs):
try:
foo = callback(my_list[i], *args, **kwargs)
if not foo:
closure(i+1, *args, **kwargs)
return foo
except IndexError:
raise Exception("Character recognition failed")
return closure
return outer
# Simplified function
@try_another_way(
['a', 'b', 'c', 'd'])
def my_func(my_item=None):
print("func {}".format(my_item))
return True if my_item == 'c' else False
x = my_func()
# Function closer to real scenario
@try_another_way(
[config0, config1, config2])
def read_time_from_image(my_item=None):
my_img = some_image_processing(config=my_item)
my_str = pytesseract.image_to_string(my_img)
if len(my_str) < 7:
return False
return my_str
我还尝试使用断点来调试它,先是i is 2
,然后是foo is True
,但是它两次进入第10行,并再次进入foo is False
,最后返回False
。为什么会这样?