Python 词典编写和硬编码条目

Python 词典编写和硬编码条目,python,dictionary,hard-coding,Python,Dictionary,Hard Coding,TypeError:无法将“非类型”对象隐式转换为str。这就是我在尝试使用函数将条目硬编码到字典中时遇到的错误。让用户输入可以工作,并将其放入字典,但这不起作用。我搜索过其他类似的错误(意思是TypeError),但没有找到任何结果。其他两个(和)出现此错误的条目与我无关 所以。我试图将aweeningandbeingawesome作为一个打印函数,认为它可以正确地打印到成就字典中,因为简单地将aweeningandbeingawesome放在那里会导致它说它需要定义。然后它发现了这个错误。我

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'}