首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python非确定性epsilon authomaton : object不可迭代

Python非确定性epsilon authomaton : object不可迭代
EN

Stack Overflow用户
提问于 2014-04-11 20:39:46
回答 1查看 274关注 0票数 1

我必须制造带有epsilon跃迁的非确定性有限自动机。我更像一个c,c#,JavaScript的家伙,但是我的大学认为因为某种原因,python是唯一的方法,所以今天我学习了python,但显然还不够。

不管怎么说。问题在于"automaton“函数。我使用带有一个元素(stanje1)的初始状态列表和自动机必须读取的字符数组(inputArrays[0])和定义转换函数的字典(字典键是字符串currentState,inputCharacter,值是下一个状态数组)来调用它。

第一次迭代运行良好,但是当我想递归地检查通过epsilon转换得到的所有状态时,我得到了错误:

代码语言:javascript
复制
TypeError: 'NoneType' object is not iterable

自动机递归被调用,所有参数的定义类似于顶层调用中的参数,但是error却不知何故跳了出来。

这是链接到我的代码,以及定义自动机的测试文件(您需要像myScript.py < automaton.txt那样运行它)。另外,这里有一个完整的错误报告:

代码语言:javascript
复制
C:\Users\Jinx\Desktop\UTRLabos1>sim.py < test.txt
['stanje1']
['st6']
Traceback (most recent call last):
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 50, in <module>
    print(automaton(['stanje1'], inputArrays[0], transitionFunction))
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 45, in automaton
    if estates : other = automaton(estates, ir[1:], fn)
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 37, in automaton
    states += eNKA(s, ir[0], fn)
TypeError: 'NoneType' object is not iterable
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 20:47:34

您的提示是,崩溃发生在以下一行:

代码语言:javascript
复制
states += eNKA(s, ir[0], fn)

而不是更深层次的eNKA函数。您可能怀疑这一行上的东西是None,而不是可迭代的。ir不可能是None,因为您之前检查过这种可能性,所以必须是eNKA的返回值为None (而且实际上正在执行states += None)。

事实上,情况就是这样。eNKA不会在每种可能的情况下都使用return值,这可能会导致返回None的默认值。

因此,修复将是了解为什么eNKA中的每个eNKA条件都失败,并对其进行适当的修复(如果每个条件都失败,则返回更明智的内容)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23022164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档