【问题标题】:Why an extra none type str is returning?为什么一个额外的无类型 str 正在返回?
【发布时间】:2021-04-09 07:57:38
【问题描述】:

这是我在 Python 中返回大写字符串的代码:

import math
import os
import random
import re
import sys


def solve(s):
    name = list(s.split())

for i in range(len(name)):
    nparts = name[i].capitalize()
    return print (nparts, end = " ")

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    s = input()

    result = solve(s)

    fptr.write(result + '\n')

    fptr.close()

当我只运行函数时,结果是好的,但是当我尝试将结果写入文件时,我得到以下错误:

fptr.write(result + '\n')

TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

通过手动检查,我发现当我将结果存储到结果变量中时,它还会获得一个额外的值“无”。我不知道为什么会这样。请帮忙。

【问题讨论】:

  • solve(s) 返回None
  • 另外,循环中带有return的循环只会运行一次,大约return print(..):选择一个。
  • 请在文件中分享一个示例输入和预期输出
  • 您的代码中大约有 3 或 4 个错误,您真的应该给出示例输入和输出,或者只是解释您尝试做什么

标签: python python-3.x list


【解决方案1】:

您的 def solve(s): 函数不返回任何内容,因此默认情况下它返回 None

将其修复为:

def solve(s):
    name = list(s.split())

    return name

【讨论】:

  • TypeError: 只能将列表(不是“str”)连接到列表
  • 这是你的代码人,我只是向你展示了你的函数没有返回任何东西,你没有return一个结果
【解决方案2】:

将每个单词大写一个句子:

  • split
  • 循环到capitalize每个单词
  • join他们按空格
import os

def solve(sentence):
    return " ".join(word.capitalize() for word in sentence.split())

if __name__ == '__main__':
    s = input("Give a sentence: ")
    result = solve(s)
    with open(os.environ['OUTPUT_PATH'], 'w') as fptr:
        fptr.write(result + '\n')

【讨论】:

    【解决方案3】:

    当程序员没有定义函数返回任何东西时,Python函数默认返回None。这就是您的程序中正在发生的事情。

    函数solve 不返回任何内容,因此返回None,该函数被调用时存储在变量result

    您可以在程序中进行的更改是返回名称。

    def solve(s):
        
        name = list(s.split())
        return name
    

    另外,在您的程序中,return 语句不能在 for 块中使用。 此外,name 未在您的 main 程序中定义。解决此问题的技巧是在 for 循环中将变量名称从 name 更改为 result,并在调用函数后放置 for 块:

    if __name__ == '__main__':
        fptr = open(os.environ['OUTPUT_PATH'], 'w')
    
        s = input()
    
        name = solve(s)
        for i in range(len(name)):
            nparts = name[i].capitalize()
            print (nparts, end = " ")
    
        fptr.write(name[0] + '\n')
    
        fptr.close()
    

    【讨论】:

    • 看来你花了一些时间来准备这个答案,提供一些细节但是......这不起作用,你keeo覆盖nparts并且大写是无用的。我的建议:总是尝试您发布的代码作为答案,我在这里已经 4 年了,32k 的声誉,我仍在尝试我发布的所有代码作为答案;)我的 pycharm 始终打开,准备测试代码
    猜你喜欢
    • 1970-01-01
    • 2015-05-05
    • 2020-08-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多