Python 词典编写和硬编码条目
TypeError:无法将“非类型”对象隐式转换为str。这就是我在尝试使用函数将条目硬编码到字典中时遇到的错误。让用户输入可以工作,并将其放入字典,但这不起作用。我搜索过其他类似的错误(意思是TypeError),但没有找到任何结果。其他两个(和)出现此错误的条目与我无关 所以。我试图将aweeningandbeingawesome作为一个打印函数,认为它可以正确地打印到成就字典中,因为简单地将aweeningandbeingawesome放在那里会导致它说它需要定义。然后它发现了这个错误。我认为它应该起作用,但它不起作用,我也不知道为什么。有人能帮我吗Python 词典编写和硬编码条目,python,dictionary,hard-coding,Python,Dictionary,Hard Coding,TypeError:无法将“非类型”对象隐式转换为str。这就是我在尝试使用函数将条目硬编码到字典中时遇到的错误。让用户输入可以工作,并将其放入字典,但这不起作用。我搜索过其他类似的错误(意思是TypeError),但没有找到任何结果。其他两个(和)出现此错误的条目与我无关 所以。我试图将aweeningandbeingawesome作为一个打印函数,认为它可以正确地打印到成就字典中,因为简单地将aweeningandbeingawesome放在那里会导致它说它需要定义。然后它发现了这个错误。我
achievements = {}
AweInspiring = print()
BeingAwesome = print()
def dovar():
global achievements
print('Type in either \'achievement get\' or \'view achievements.\'')
achieve = input()
if achieve == 'view achievements':
print('Achievements')
for x in achievements.keys():
print('Achievement Name: ' + x + '\tFor: ' + achievements[x])
elif achieve == 'achievement get':
achieveget()
elif achieve == 'achieve':
hardachieve()
def achieveget():
print('Add Achievement')
achievename = input('Name of achievement earned: ')
achievedesc = input('How was the achievement earned: ')
achievements[achievename] = achievedesc
dovarloop()
def hardachieve():
achievename = AweInspiring
achievedesc = BeingAwesome
achievements[achievename] = achievedesc
dovar()
def dovarloop():
dovar()
dovar()
print()
不返回任何内容(默认情况下,它返回None
)。因此,当您执行成就[achievename]=achievedesc
时,python实际上是这样做的:
{None:None}
然后你在做:
print('Achievement Name: ' + x + '\tFor: ' + achievements[x])
其中x
是键None
,成就[x]
是值(也是None
)
但是不能连接字符串和非类型(因此出现错误)
因此,您的代码以最简单的形式(作为示例)尝试执行以下操作:
print('Hello' + None)
要解决此问题,您可以使
令人惊叹
和成为空字符串:
AweInspiring = ''
BeingAwesome = ''
在我空闲的时候编辑了它,添加了一个成就,最后以我自己为荣,因为它对我来说很好:
achievements = {}
def dovar():
global achievements
print('Type in either \'achievement get\' or \'view achievements.\'')
achieve = raw_input()
if achieve == 'view achievements':
print('Achievements')
for x in achievements.keys():
print('Achievement Name: ' + x + '\tFor: ' + achievements[x])
elif achieve == 'achievement get':
achieveget()
elif achieve == 'achieve':
hardachieve()
def achieveget():
print('Add Achievement')
achievename = raw_input('Name of achievement earned: ')
achievedesc = raw_input('How was the achievement earned: ')
achievements[achievename] = achievedesc
dovarloop()
def hardachieve():
global achievments
achievename = "got a cat"
achievedesc = "found one"
achievements[achievename] = achievedesc
#dovar()
def dovarloop():
dovar()
dovar()
我的对话:
=================================================重新启动================================
那么我该如何打印“令人敬畏”和“BeingAwesome”呢?我该如何定义它呢?@Justin嗯,我不确定,这由你来决定。如果你不想要它,你可以使用空字符串'
Facepalm*我不敢相信我没有把''放在第一位。。。这就是我要做的if声明或任何事情。。。D:我会接受这个答案,因为它在评论中有答案xD@Justin哈哈,很高兴我能帮忙:)
>>>
Type in either 'achievement get' or 'view achievements.'
achievement get
Add Achievement
Name of achievement earned: got a cat
How was the achievement earned: found one
Type in either 'achievement get' or 'view achievements.'
view achievements
Achievements
Achievement Name: got a cat For: found one
>>>
>>> ================================ RESTART ================================
>>> hardachieve()
>>> achievements
{'got a cat': 'found one'}