Python 类型错误:对象不可下标

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36335328/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 17:44:50  来源:igfitidea点击:

TypeError: object is not subscriptable

pythontypeerror

提问by AEU

I`ve obtain this error

我得到了这个错误

  File "/class.py", line 246, in __init__
if d and self.rf == 2 and d["descriptionType"] in ["900000000000003001"] and d["conceptId"] in konZer.zerrenda:
TypeError: 'Desk' object is not subscriptable

I created this object

我创建了这个对象

class Desk:
     descriptionId = ""
     descriptionStatus = ""
     conceptId = ""
     term = ""

And I called it in another class

我在另一堂课上叫它

class DescriptionList():

     def deskJ(self,line):
         er = line.strip().split('\t')
         desc = Desk()
         if er[1] == "0":
            desc.descriptionId = er[0]
            desc.descriptionStatus = er[1]
            desc.conceptId = er[2]
            desc.term = er[3]
         return description

Then I called the function "deskJ" at initand I get the error at this part (I've deleted some parts of the function):

然后我在init 中调用了函数“deskJ”,在这部分出现错误(我删除了函数的某些部分):

def __init__(self,fitx,konZer,lanZer={}):
        with codecs.open(fitx,encoding='utf-8') as fitx:
            lines = fitx.read().split('\n')[1:-1]
            for line in lines:
                d = self.deskJ(line)
                if d and self.rf == 2 and d["descriptionType"] in ["900000000000003001"] and d["conceptId"] in konZer.zerrenda:
                    c = konZer.zerrenda[d["conceptId"]]
                    c["fullySpecifiedName"] = d["term"]

What am I doing wrong?

我究竟做错了什么?

回答by zondo

Using d["descriptionType"]is trying to access dwith the key "descriptionType". That doesn't work, though, because dis a Deskobject that doesn't have keys. Instead, get the attributes:

Usingd["descriptionType"]正在尝试使用d密钥访问"descriptionType"。但是,这不起作用,因为它d是一个Desk没有键的对象。相反,获取属性:

if d and self.rf == 2 and d.descriptionType in ["900000000000003001"] and d.conceptId in konZer.zerrenda: