[英]str object is not callable error python
我一直在嘗試在Python中運行以下代碼:
def likes(names):
dictionary_of_sizes = {
0:"no one likes this",
1:(lambda names: "{} likes this".format(names[0])),
2:(lambda names: "{} and {} like this".format(names[0], names[1])),
3:(lambda names: "{}, {} and {} like this".format(name[0], names[1],names[2])),
4:(lambda names: "{}, {} and {} others like this".format(names[0], names[1], len(names)-2))
}
return dictionary_of_sizes[len(names)](names) if len(names)<4 else dictionary_of_sizes[4]
我總是得到錯誤的'str'對象不可調用。
問題:我做錯了什么?
如果傳遞一個空字符串,它將寫出錯誤消息。 您可以使用列表而不是字典:
def likes(names):
options = ["no one likes this",
lambda names: "{} likes this".format(names[0]),
lambda names: "{} and {} like this".format(names[0], names[1]),
lambda names: "{}, {} and {} like this".format(name[0], names[1],names[2]),
lambda names: "{}, {} and {} others like this".format(names[0], names[1], len(names)-2)
]
if type(names) == list:
return options[min(len(options),len(names))](names)
def likes(names):
options = [ lambda:"no one likes this",
lambda:f"{names[0]} likes this",
lambda:f"{names[0]} and {names[1]} like this",
lambda:f"{names[0]}, {names[1]} and {names[2]} like this",
lambda:f"{names[0]}, {names[1]} and {len(names)-2} others like this"
]
return options[min(len(options),len(names))]()
print(likes([]))
print(likes("bob"))
print(likes([""]))
print(likes(["alice","bob"]))
print(likes(["alice","bob","charlie"]))
print(likes(["alice","bob","charlie","david"]))
no one likes this
no one likes this
b, o and b like this
likes this
alice and bob like this
alice, bob and charlie like this
alice, bob and 2 others like this
您沒有向我們展示引發異常的代碼。 當您不告訴我們您在做什么時,很難說您在做什么錯。 但是,如果我這樣做,它似乎可以工作:
>>> likes(["John","Harry"])
'John and Harry like this'
我懷疑您可能會這樣調用likes()
:
>>> likes(["John","Harry"])()
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'str' object is not callable
或像這樣:
>>> likes("")
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 7, in likes
TypeError: 'str' object is not callable
毫不奇怪,您很難確定如何調用該函數。 該代碼的作用是不必要的復雜。 它需要完全重寫。 如果要快速修復,請更改此行:
{0:"no one likes this",
至
{0:(lambda names: "no one likes this"),
但是,您實際上應該刪除所有那些不必要且難以閱讀的lambda
並執行以下操作:
def likes(names):
if len(names) > 3:
names = names[:2] + [f"{len(names)-2} others"]
elif len(names) == 0:
names = ["no-one"]
result = " and ".join(", ".join(names).rsplit(", ",1))
if len(names) == 1:
return result + " likes this"
else:
return result + " like this"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.