寻找正则表达式的排列

时间:2014-03-23 18:22:19

标签: python regex recursion

我正在尝试找到正则表达式(s)的排列,这也是正则表达式,这是我到目前为止所做的:

def permutations(s):
    leaves = ['1', '2', '0', 'e']
    possible = []

    if len(s) == 3 and s[1] in leaves:
        return s
    elif len(s) > 3:
        for i in range(len(s)):
            current_character = s[i]
            other_characters = s[:i] + s[i+1:]
            for possible_regexes in permutations(other_characters):
                if is_regex(possible_regexes):
                    possible = [[current_character] + [other_characters]]
        return possible

    for regexes in possible:
        print(regexes)

但是我收到一个错误,告诉我我无法迭代字符串,我很确定这是问题所在:possible = [[current_character] + [other_characters]]。我将如何返回它,以便我可以迭代每个排列,然后确定该排列是否有效?

编辑这是错误TypeError: 'NoneType' object is not iterable

EDIT2 完整追溯:  File "regex_functions.py", line 86, in <module> print (all_regex_permutations('(1.2)')) File "regex_functions.py", line 68, in all_regex_permutations for possible_regexes in all_regex_permutations(other_characters): File "regex_functions.py", line 68, in all_regex_permutations for possible_regexes in all_regex_permutations(other_characters): TypeError: 'NoneType' object is not iterable

1 个答案:

答案 0 :(得分:2)

您发布的回溯引用了与您发布的功能不同的功能名称,但它似乎只是重命名。我会假设情况就是这样。

您应该关注的跟踪项是追溯中的最后一项。

 File "regex_functions.py", line 68, in all_regex_permutations
   for possible_regexes in all_regex_permutations(other_characters):
 TypeError: 'NoneType' object is not iterable

错误表明NoneType不可迭代。这意味着调用all_regex_permutations(other_characters)的结果在某个时刻返回None。您需要分析代码并弄清楚它实际返回的位置None

我暗示并非每个代码路径都返回一个值,这是导致此错误的最终原因(我看到其他可能的错误,但这是一个不同的问题)。您应该问自己这些问题:“此功能的所有代码路径是什么?”并且“我会为每个人返回正确的结果吗?”

我已经突出显示了该函数中的代码路径。

enter image description here

  1. 橙色路径将返回s的任何内容。假设s是列表或其他预期类型,那么这将起作用。
  2. 绿色路径将返回possible的任何内容。 possible设置在两个不同的点,即函数顶部的初始值,以及循环体中赋值的新结果。
  3. 蓝色路径将落到功能的末尾。在Python中,如果函数没有显式返回值,则理解为返回None
  4. 蓝色路径是问题所在。你没有在那里归还任何东西。 需要纠正。