如何在None的Python列表中设置意外类型

时间:2019-11-07 20:21:16

标签: python

我正在尝试将“端口”放入“无”列表中

ports = [None] * 5

for ident in range(len(self.ports)):
     if self.ports[ident] is None:
          try:
              serialC = Serial("COM" + str(ident), 19200)
              portX = Port(serialC, ident, self.main)
              #portX.start()
              self.ports[ident] = portX
          except Exception as e:
              print(e)
              continue

但是我得到了意外的类型 (整数,端口) 预期 (int,无) (切片,itarable [无])

出现错误消息:无法设置属性。

如何解决此错误?

class Port(threading.Thread):
    def __init__(self, port, ident, main):
        self.main = main
        self.port = port
        self.ident = ident
        threading.Thread.__init__(self)
Traceback (most recent call last):
  File "C:\Users\TDJ-PC\PycharmProjects\embeddedProject\serialTh.py", line 28, in check
    portX = Port(Serial("Com" + str(ident), 19200), ident, self.main)
  File "C:\Users\TDJ-PC\PycharmProjects\embeddedProject\port.py", line 10, in __init__
    self.ident = ident
AttributeError: can't set attribute

1 个答案:

答案 0 :(得分:2)

ident对象的Thread属性是不可分配的;您无法通过子类的__init__方法进行设置,这样做也没有道理。

来自documentation

  

此线程的“线程标识符”;如果尚未启动该线程,则为“无”。这是一个非零整数。请参见get_ident()函数。当一个线程退出并创建另一个线程时,可以回收线程标识符。即使线程退出后,标识符仍然可用。

因此,启动线程时将自动为您设置ident属性。