【问题标题】:Dictionary Writing and Hard-Coded Entries字典写作和硬编码条目
【发布时间】:2013-07-08 05:30:42
【问题描述】:

TypeError:无法将“NoneType”对象隐式转换为 str。这是我尝试使用函数将条目硬编码到字典中时遇到的错误。让用户输入有效,并将其放入字典中,但这不起作用。我已经搜索过诸如此类的其他错误(意思是 TypeError。),但我什么也没找到。其他两个(Thisthis)条目与我无关。

所以。我试图让 AweInspiring 和 BeingAwesome 成为一个打印函数,认为它会正确地打印到成就字典中,因为简单地将 AweInspiring 和 BeingAwesome 放在那里会导致它说需要定义它。然后它出现了这个错误。我认为它应该工作,但它没有,我不知道为什么。有人可以帮帮我吗?

    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()

【问题讨论】:

    标签: python dictionary hard-coding


    【解决方案1】:

    print() 不返回任何内容(默认情况下,它返回None)。那么当你做achievements[achievename] = achievedesc 时,python 实际上是在做这个:

    {None:None}
    

    那么你正在做:

    print('Achievement Name: ' + x + '\tFor: ' + achievements[x])
    

    其中x 是键Noneachievements[x] 是值(也是None

    但是你不能连接一个字符串和一个 NoneType (因此错误)。


    差不多,您的代码以最简单的形式(例如),您正在尝试这样做:

    print('Hello' + None)
    

    要解决这个问题,您可以将AweInspiringBeingAwesome 设为空字符串:

    AweInspiring = ''
    BeingAwesome = ''
    

    【讨论】:

    • 那我将如何打印“AweInspiring”和“BeingAwesome”?我必须将其定义为什么?
    • @Justin 好吧,我不确定,这由您决定。如果你不想要它,你可以使用一个空字符串''
    • Facepalm* 我不敢相信我没有把 '' 放在首位......这就是我为 if 语句或任何东西所做的...... D:
    • 我会接受这个答案,因为它在 cmets xD 中有答案
    • @Justin Lol,很高兴我能帮上忙 :)
    【解决方案2】:

    在空闲时对其进行了编辑,添加了一项成就,最终为自己感到自豪,因为它对我来说很好用:

     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()
    

    我的对话:

    ================================= 重启============== ===================

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多