&引用;bool不可下标”;未索引到bool-Python时出错
我有以下功能:&引用;bool不可下标”;未索引到bool-Python时出错,python,boolean,Python,Boolean,我有以下功能: def in_loop(i): global loop_started if i == '[': loop_started = True return [True, 'loop starting'] if loop_started: if i == ']': loop_started = False
def in_loop(i):
global loop_started
if i == '[':
loop_started = True
return [True, 'loop starting']
if loop_started:
if i == ']':
loop_started = False
return [True, 'loop over']
return True
return False
我相信这是在返回一个元组,当我为“]”时,它看起来像(真的,“循环结束”)。
然后,我尝试用
for index, i in enumerate(code):
if in_loop(i):
loop_counter += 1
if in_loop(i)[1] == 'loop starting':
loop_start = index
if in_loop(i)[1] == 'loop over':
loops[f'loop{loop_num}'] = {'start': loop_start, 'end': index}
loop_num += 1
但这带来了一个错误
TypeError: 'bool' object is not subscriptable
另外,code=“++++[-][-]”
为什么在我索引到元组时会出现此错误?您是如何初始化var
循环的?(或者换句话说,loop\u start
在函数未执行时有什么值?)
如果在执行函数之前启动的loop\u
为False
,则函数将直接返回False
快速修复方法是在所有布尔返回语句之后添加一个空字符串。问题是,当到达“+”或“-”等字符时,基本上是返回布尔值,但如果在循环(i)[1]==”循环开始“:
必须为第二个循环返回一致的返回类型,循环代码才能工作。对于ex,请查看以下代码注释:
def in_loop(i):
global loop_started
if i == '[':
loop_started = True
return [True, 'loop starting']
if loop_started:
if i == ']':
loop_started = False
return [True, 'loop over']
return True #This will have side effects and is inconsistent with your other returns of in_loop
return False #This will have side effects and is inconsistent with your other returns of in_loop
只有当您输入的内容不是
'['
或']
时才会出现这种情况,因为如果循环启动:,它将进入的第二个,默认情况下,如果内部条件未通过,它将返回True
,这就是它不起作用的原因。当i
不是]
时会发生什么。(无
返回)@Kingsley我认为这就是问题所在,事实上,我也相信有一段缺失的代码返回一个布尔值
这对我有效:如果在循环中(']')[1]='loop_over':
但是如果我没有通过']
作为I
,我得到的非类型对象不可下标
,当我不可下标时,它会做其他事情,我只是没有包括这一点,以便更容易阅读问题是返回False
/返回True
当i
既不是'['
也不是']