我正在尝试模拟一个非常简单的文本编辑器,它接受来自用户的文本行,将文本组合成一个字符串,然后将字符串打印到文件中。当我运行我的代码时,我发现文件内容只是“无”。
我跟踪代码并发现从核心函数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的新手,我有兴趣了解为什么会出现这种问题。
答案 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)