如何使用多个东西签入else语句?

2024-06-28 20:51:14 发布

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

我正在尝试创建一个机器学习程序。到目前为止,我已经在一个文本文件中存储了每一个“习得”含义,并将其保存在一个列表中,该列表列出了所有属于该含义的内容。文本文件由python文件读取,python文件生成类对象,这些类对象将文本文件中的数据属性化为类对象。然后,在主python文件中,主提示符是我遇到问题的地方

else:
    try:
        for obj in gc.get_objects():
            try:
                if isinstance(obj, LearnedClasses.learned):
                    if str(user.lower()) in obj.keys:
                        exec(obj.exstring)
                        chat()
                        break
            except:
                raise Exception

    except Exception:
        user = user.split()
        for x in user:
            learnlist.append(x)
            learnch = random.choice(learnlist)
            learnp = input("What does '{}' mean?".format(learnch))
            learn(learnch, learnp)

chat()

这段代码遵循我所做的基本“内置”响应。这是在内置部分找不到任何关键字后发生的情况。我使用GC收集从文本文件生成的所有类对象。然后,如果提示将任何关键字与其“已学习”关键字匹配,我希望它使用为该类设置的响应进行响应。然而,我不能让它继续讨论if ALL-ELSE失败的部分,它从Exception开始。我如何安排它,使它能够实现我所描述的?多谢各位


Tags: 文件对象inobj列表forifexception
1条回答
网友
1楼 · 发布于 2024-06-28 20:51:14

遵循这个代码有点困难;以下是一些改进建议:

  • raise Exception有一个打字错误:应该是raise Exception()

  • 有一个except块只会引发一个异常而没有额外信息,这没有多大意义;省略它

  • 事实上,垃圾收集器不是存储您以后需要的信息的好地方;您能否更改代码,使学习的类存储在变量的列表中,并以某种方式返回或传递

    一般来说,除非内存不足,否则永远不要触摸垃圾收集器,然后才知道如何帮助它丢弃东西

  • 正如其他人在评论中所建议的,不要使用try/except,而是使用类似于flag变量的东西来跟踪您是否已经回答,或者使用for/break/else结构:

    for lc in learned_class_list:
        if str(user.lower()) in lc.keys:
            exec(lc.exstring)
            chat()
            break
    else:
        user = user.split()
        for x in user:
            learnlist.append(x)
            learnch = random.choice(learnlist)
            learnp = input("What does '{}' mean?".format(learnch))
            learn(learnch, learnp)
    

相关问题 更多 >