具有属性错误的函数:'NoneType'对象没有属性'replace'



我的小程序从用户输入中获取一个字符串,并在每个字母之间添加点,然后删除这些点。

函数add_dots取字符串并加点。我有一个单独的名为remove_dots的函数,然后删除它们。

代码如下:

def add_dots(str):
str = ".".join(str)
print(str)
def remove_dots(str):
str.replace(".", "")
print(str)
word = input("Enter a word: ")

当我用

分别调用两个函数时
add_dots(word)
remove_dots(word)
我得到了预期的控制台输出
Enter a word: hello
h.e.l.l.o
hello
然而,当我尝试调用 时
remove_dots(add_dots(word))

我得到一个错误AttributeError: 'NoneType' object has no attribute 'replace'

我理解这意味着str变量具有None的值,但我不确定为什么?有人能给点建议吗?由于

这是因为您的add_dotsremove_dots函数实际上没有返回任何东西,它们只是打印值。因此,将add_dots的输出传递给remove_dots会导致传递的值为None

还要注意,使用str作为变量名通常是一个坏主意;使用string或更具描述性的名称是更好的做法。

修改代码返回修改后的字符串,如下所示:

def add_dots(string):
string = ".".join(string)
return string
def remove_dots(string):
string = string.replace(".", "")
return string
word = input("Enter a word: ")

并打印如下输出:

print(add_dots(word))
print(remove_dots(word))
print(remove_dots(add_dots(word)))

你的函数没有返回任何东西。另外,不存储str.replace(".", "")的输出。这应该可以工作。

def add_dots(str):
return ".".join(str)
def remove_dots(str):
return str.replace(".", "")
def add_dots(str):
str = ".".join(str)
print(str)
return str
def remove_dots(str):
str = str.replace(".", "")
print(str)
return str

这应该修复你的代码。

请参阅@Chris和@Michael Butscher对您的帖子的评论

当你在函数中返回时,你必须转换为其他数据类型,如列表,字符串。在本例中,第一个函数应该是

def add_dots(string):
string = ".".join(string)
print(string)
return str(string)

第二个函数应该是

def remove_dots(string):
string = string.replace(".", "")
print(string)
return str(string)

因为任何从函数返回的东西,它返回" nontype "为默认。和Nonetype no method__getitem__

裁判:https://www.pythonpool.com/typeerror-nonetype-object-is-not-subscriptable/

最新更新