加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

不索引到布尔中时出现“布尔不可下标”错误-Python

发布时间:2020-12-17 17:40:30 所属栏目:Python 来源:网络整理
导读:我有以下功能: 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 我相信这将返回一个元组,

我有以下功能:

    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

另外,代码=“ [-] [-]”.

在索引到元组时为什么会引发此错误?

最佳答案
问题是当到达像”或’-‘之类的字符时,您实际上返回的是布尔值,但是如果in_loop(i)[1] ==’循环开始’,则仍在访问:尽管如此.

您必须返回一致的返回类型,第二个for循环代码才能正常工作.对于前者,请查看以下代码注释:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读