Python 3.8.2 |为什么我有一个:TypeError:无法解包不可iterable的非类型对象?

2024-06-28 20:01:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者。为什么调用此函数时会出现此错误? 我的函数搜索第一个尚未发现的技术(在dict_tech中)(在dict_techdisc中)。然后,如果您拥有所需数量的技术点数,它会调用一个提示,询问您是否希望发现该技术。如果答案是“是”,它将用所需的数量减去您拥有的技术点数,并使用dict_TECH的相同键更新dict_techdisc。如果答案是“否”,它将停止重新搜索

dict_techdisc = {}
dict_tech = {"A":"Première lettre de l'Alphabet, Première des Voyelles.'a': Symbole de l'Are et de l'Attométrie.'A': Symbole de l'Ampère, Ancien Symbole de l'Argon.(Musique) 'A' La, dans le système de notation anglo-saxonne et germanique.'Å': Symbole de l'Angström.'À': Bombe Nucléaire de Fission."} 
dict_cout = {"A":6,"À(2)":11,"Abaca":1,"Abacule":1,"Abaisser (et ses dérivés)":13,"Abajoue":1,"Abandonner (et ses dérivés)":11,"Abaque":3,"Abasie":1}

def techachat(ptstech):
    """
Action servant à acheter une technologie pour un coût donné.
    """
    try:
        for tech, val in dict_cout.items():
            if tech in dict_cout.keys() and tech not in dict_tech.keys(): 
                if int(val) < ptstech:
                    res = 0
                    requete = ""
                    while requete != "oui" or requete != "non":
                        requete = input(f"Veux-tu acheter la technologie {tech}? (Oui, Non)")
                        if requete == "Oui":
                            ptstech -= int(val)
                            res = ptstech
                            for tech2 in dict_tech:
                                if dict_tech.get(tech2) is not None:
                                    dict_techdisc.update(dict_tech[tech2])
                                else:
                                    continue
                                break
                            time.sleep(3)
                            print(f"Vous avez bien débloqué la technologie {tech} pour un coût de {val} points TECH.")
                            time.sleep(3)
                            print(f"Il vous reste {ptstech} points TECH.")
                            time.sleep(3)
                            print("Fin de la requête")
                            print(dict_techdisc)
                            return res, dict_techdisc
                        elif requete == "Non":
                            print("Fin de la requête.")
                            return
                        else:
                            print("Réponse non valide!")
                            continue
                else:
                    print("Vous n'avez pas assez de points TECH pour pouvoir acheter la prochaine technologie!")
            else:
                continue
    except:
        print("Fin de la requête.")

这里是我使用它的地方:

from Lanfangist import *

import time

from AvrupaBody import *

from Acte1 import *

from Sauvegarde import *

#-----Modules au dessus
#-----Code en dessous

#aventurech1()
dict_tech = {"A":"Première lettre de l'Alphabet, Première des Voyelles.'a': Symbole de l'Are et de l'Attométrie.'A': Symbole de l'Ampère, Ancien Symbole de l'Argon.(Musique) 'A' La, dans le système de notation anglo-saxonne et germanique.'Å': Symbole de l'Angström.'À': Bombe Nucléaire de Fission."} 
dict_cout = {"A":6,"À(2)":11,"Abaca":1,"Abacule":1,"Abaisser (et ses dérivés)":13,"Abajoue":1,"Abandonner (et ses dérivés)":11,"Abaque":3,"Abasie":1}

_ptstech = 50
_argent = 0
dict_techdisc = {}
_argent, dict_techdisc = techachat(_ptstech)
_ptstech = _argent
print(_ptstech)
print(dict_techdisc)
_argent, dict_techdisc = techachat(_ptstech)
_ptstech = _argent
print(_ptstech)
print(dict_techdisc)

下面是错误:

        _argent, dict_techdisc = techachat(_ptstech)
TypeError: cannot unpack non-iterable NoneType object

Tags: importrede技术dictlatechet
1条回答
网友
1楼 · 发布于 2024-06-28 20:01:53

如果您编写_argent, dict_techdisc = techachat(_ptstech),这意味着您希望函数返回一个大小为2的列表或元组。但是,函数并不总是返回双元素iterable。当它返回None时(在没有遇到返回语句时发生),将引发异常。就好像你在写x, y = None。考虑用^ {< CD4> }块包围函数调用。

相关问题 更多 >