Python 如何使用多个东西签入else语句?
我正在尝试创建一个机器学习程序。到目前为止,我已经在一个文本文件中存储了每一个“习得”含义,并将其保存在一个列表中,该列表列出了所有属于该含义的内容。文本文件由python文件读取,python文件生成类对象,这些类对象将文本文件中的数据属性化为类对象。然后,在主python文件中,主提示符是我遇到问题的地方Python 如何使用多个东西签入else语句?,python,Python,我正在尝试创建一个机器学习程序。到目前为止,我已经在一个文本文件中存储了每一个“习得”含义,并将其保存在一个列表中,该列表列出了所有属于该含义的内容。文本文件由python文件读取,python文件生成类对象,这些类对象将文本文件中的数据属性化为类对象。然后,在主python文件中,主提示符是我遇到问题的地方 else: try: for obj in gc.get_objects(): try: if isinst
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开始。我如何安排它,使它能够实现我所描述的?谢谢。遵循此代码有点困难;以下是一些改进建议:
有一个输入错误:它应该是raiseexception
raiseexception()
- 有一个
块没有多大意义,除了它只会引发一个异常而没有额外的信息;省略它
- 事实上,垃圾收集器不是存储您以后需要的信息的好地方;您能否更改代码,使学习的类存储在变量的列表中,并以某种方式返回或传递 一般来说,除非内存不足,否则永远不要触摸垃圾收集器,然后才知道如何帮助它丢弃东西
- 正如其他人在评论中所建议的,不要使用try/except,而是使用类似于flag变量的东西来跟踪您是否已经回答,或者使用for/break/else结构:
对于学习类列表中的lc: 如果lc.keys中的str(user.lower()): exec(lc.exstring) 聊天室() 打破 其他: user=user.split() 对于用户中的x: learnlist.append(x) learnch=random.choice(learnlist) learnp=input(““{}”是什么意思?”.format(learnch)) 学习(learnch,learnp)
else
语句。您可以尝试存储是否在变量中找到匹配项。如果您不嵌套try
块,效果会更好。您也不应该使用try
-作为如果else
。只有当try
块中存在异常时,才会运行except
块。您可以触发异常。您能否检查是否调用了引发异常
?在相同的except块中添加一个print语句。我能够保留我对gc的使用,但您的回答让我意识到,事实上,我可以将for循环本身作为条件使用,因为如果任何迭代都不适合,它将返回false。非常感谢。为什么必须在您指出的情况下才能使用GC?顾名思义,垃圾收集器是为垃圾而设计的。。。它对程序其余部分的不明显变化也很敏感;一些垃圾会被立即收集,因此您永远不会在gc.get_objects()
中看到它;有些是定期收集的,因此您可能会看到它,也可能看不到它,这取决于它是否已被收集。您可能会将一段代码移动到函数中,并发现现在收集对象的时间太短;或者你可能会发现你得到了你从未打算包含的对象。在一个变量中有一个列表可以确保你得到你想要的。