函数返回None而不是预期的字符串

时间:2013-09-25 15:30:28

标签: python string

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

我跟踪代码并发现从核心函数getpayload()返回的结果字符串是'None',尽管字符串是正确构建的,直到返回点为止。

代码(剥离文件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的新手,我有兴趣了解为什么会出现这种问题。

2 个答案:

答案 0 :(得分:7)

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

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

如果您不添加return,则会丢弃从return s返回的值,默认情况下您的函数会返回None

答案 1 :(得分:0)

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

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