递归函数名称错误

时间:2015-12-26 21:02:42

标签: python for-loop recursion error-handling

def a(j):

    lines=in_file.readlines()
    linex=[]
    for line in lines:
        line=line.strip("\n").split(" ")
        linex.append(line)
    print(linex)
    for i in linex:
        for j in i:
            if j=="":
                return 0
            elif j=="X" or j=="Y":
                return 0
            else:
                return a(j[:-1])

in_file=open("ncl.txt","r")
a(j)

这是我的代码,我有一个带有此代码的NameError。

  

NameError:名称'i'未定义

所以我无法运行代码..你可以帮我解决一下..

 linex = [['CATTCG', 'ACT'], ['GGTAC', 'GCATTA']] after file operations..

解释我正在尝试做的小代码:

def a(j):

   if j=="":
     return 0
   elif j=="X" or j=="Y":
     return 0
   else:
     return a(j[:-1])


a("GUGUUG")

我只想概括列表中每个j的代码。

2 个答案:

答案 0 :(得分:-1)

错误正在发生,因为没有名为j的变量。

j中的a(j)替换为in_file


改变这个:

a(j)

对此:

a(in_file)


如果您更喜欢使用j,那么您需要创建/定义j变量,如下所示:

j = open("ncl.txt", "r")


最佳做法是为变量赋予有意义的名称,就像使用in_file一样。

答案 1 :(得分:-1)

然后你发布了一个使用某个文件的代码,也发布了一个文件。或者至少在代码本身中添加该文件的内容。你可以在开头添加类似的东西来做到这一点:

my_strings = """line 1
line 2
line 3"""

这与执行此操作相同:

with open("somefile.txt","r") as my_file:
    my_string = my_file.read()

包含以下内容的文件:

line 1
line 2
line 3

关于你在该函数的主体中执行readlines(),然后进行递归。在外面获取它,它不属于那里,它可能会在第二次调用时发生一切,因为如果已经读取了文件,readlines()将不会返回任何内容。

我建议使用for循环而不是递归,它们更安全,更简单。我真的不明白你想要做什么,所以这只是一个建议。

lineslinex是危险的名字,有一天你会误认为另一个,并会在几个小时内搜索错误。也许称之为all_lineslines_list