我有这两个功能:
def make_regex_from_hex_sign(hex_sign):
regex_hex_sign = re.compile(hex_sign.decode('hex'))
return regex_hex_sign
def find_regex_pattern_and_return_its_offset(regex_pattern, bytes_array):
if found_regex_pattern in regex_pattern.finditer(bytes_array):
return found_regex_pattern.start()
else:
return 0
我正在像这样使用它们:
pattern = make_regex_from_hex_sign("634351535F")
file = open('somefile.bin', 'rb')
allbytes = file.read()
offset = find_regex_pattern_and_return_its_offset(pattern, allbytes)
Python抛出:NameError: global name 'found_regex_pattern' is not defined
如果我在if
中将for
替换为if found_regex_pattern in regex_pattern.finditer(bytes_array)
,则可以使用,但是最后我需要break
才能阻止它搜索经过首次发现的模式迭代。是否有更优雅的方法可以解决此问题,而无需使用for
和break
?
答案 0 :(得分:0)
您没有定义found_regex_pattern。 当您执行从if到for的更改时,它的工作是有效的,因为它是有效的语法,这意味着found_regex_pattern充当可迭代的regex_pattern.finditer(bytes_array)的条目。