2

我正在尝试模拟一个非常简单的文本编辑器,它接受来自用户的文本行,将文本组合成一个字符串,然后将字符串打印到文件中。当我运行我的代码时,我发现文件内容只是“无”。

我跟踪了代码,发现从核心函数 getpayload() 返回的结果字符串是“无”,尽管该字符串在返回点之前是正确构建的。

代码(剥离了按原样执行的文件 I/O):

def getpayload(s):
        temp = getln()
        if temp.upper() != "END":
            s += temp
            getpayload(s)
        else:
            return s

def getln():
    txt = input("|> ")
    return str(txt)

def start():
    text = getpayload("")
    print(text)


if __name__ == "__main__":
    start()

运行时会产生以下内容:

$ python3.2 editor.py
|> Line one
|> Line two
|> Line three
|> 
|> Line five
|> END
$ None

在 else 语句中打印字符串会按预期生成字符串的输出。我还在 str() 中包含了返回字符串。

我研究了其他产生所需输出的方法,但我是 python 新手,我有兴趣了解为什么会发生这种问题。

4

2 回答 2

8

您没有返回递归函数调用的结果。当您从递归函数返回时,这些问题经常被初学者忽略。if将第一个函数中的块更改为:

if temp.upper() != "END":
    s += temp
    return getpayload(s)

如果您不添加return,则从返回的值将return s被丢弃,并且您的函数默认返回None

于 2013-09-25T15:32:10.590 回答
0

递归时,您需要返回值,否则将其删除:

if temp.upper() != "END":
   s += temp
   return getpayload(s)
于 2013-09-25T15:32:23.497 回答