Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;bool不可下标”;未索引到bool-Python时出错_Python_Boolean - Fatal编程技术网

&引用;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
既不是
'['
也不是
']