首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:当尝试将参数传递给循环中的函数时,'NoneType‘对象是不可订阅的

TypeError:当尝试将参数传递给循环中的函数时,'NoneType‘对象是不可订阅的
EN

Stack Overflow用户
提问于 2021-09-23 08:37:40
回答 1查看 136关注 0票数 0

我试图将一个字典值传递给一个函数,并得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "check_alarm_status.py", line 33, in <module>
    main()
  File "check_alarm_status.py", line 18, in main
    alarmStatus = read_digital_input.main("i1", adams_ips[n])[0]
TypeError: 'NoneType' object is not subscriptable

我已经在其他脚本中使用了相同的函数,但是在循环中这个函数不起作用。这是我的代码:

代码语言:javascript
复制
import read_digital_input
import change_terminal_light
import time

terminales_ips = { "1":"10.102.12.87", "2":"10.102.12.88", "3":"10.102.12.89", "4":"10.102.12.90", "5":"10.107.12.80"}
adams_ips = {"1":"10.102.12.91", "2":"10.102.12.92", "3":"10.102.12.93", "4":"10.102.12.94", "5":"10.107.12.82"}
previous_state = [0, 0, 0, 0, 0]
state = [False, False, False, False, False]

APAGADO = 0
ENCENDIDO = 5
aux = 0

def main():
        while True:
                for n in adams_ips:
                        alarmStatus = read_digital_input.main("i1", adams_ips[n])[0]
                        state[int(n)-1] = alarmStatus
                        print("Alarm status ", n, " = ", alarmStatus)
                        if state[int(n)-1] is not previous_state[int(n)-1]:
                                print("Terminal ", n, " changed")
                                if state[int(n)-1] == True:
                                        print("Encendiendo el terminal", n)
                                        change_terminal_light.main(ENCENDIDO, terminales_ips[n])
                                elif state[int(n)-1] == False:
                                        print("Apagando el terminal", n)
                                        change_terminal_light.main(APAGADO, terminales_ips[n])
                        previous_state[int(n)-1] = state[int(n)-1]
                        time.sleep(0.5)

if __name__ == "__main__":
        main()

我也看到过类似的错误,但我无法解决这个问题。

编辑这里是read_digital_input.py (我正在使用它与其他脚本一样):

代码语言:javascript
复制
import time
from pyModbusTCP.client import ModbusClient

port = "502"

coil_dictionary = {
    "i0": 0,
    "i1": 1,
    "i2": 2,
    "i3": 3,
    "i4": 4
}


def main(coil, host):
    print(host)
    try:
        c = ModbusClient(host, port)
        c.open()
        state = c.read_coils(coil_dictionary[coil])
        return state

    except ValueError:
        print("Error with host or port params")


if __name__ == '__main__':
    main()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-23 08:48:36

回溯告诉你这行中有一个错误

代码语言:javascript
复制
alarmStatus = read_digital_input.main("i1", adams_ips[n])[0]

'NoneType' object is not subscriptable表示您(通过调用[])订阅了一个None对象,因此很可能

代码语言:javascript
复制
read_digital_input.main("i1", adams_ips[n])

调用了一个None。也许你需要检查一下这是不是一个零,就像这样

代码语言:javascript
复制
def main():
        while True:
                for n in adams_ips:
                        input = read_digital_input.main("i1", adams_ips[n])
                        if input is None:
                            continue
                            # you may want to do something else than simply skipping here
                        alarmStatus = alarm[0]
                        state[int(n)-1] = alarmStatus
                        print("Alarm status ", n, " = ", alarmStatus)
                        if state[int(n)-1] is not previous_state[int(n)-1]:
                                print("Terminal ", n, " changed")
                                if state[int(n)-1] == True:
                                        print("Encendiendo el terminal", n)
                                        change_terminal_light.main(ENCENDIDO, terminales_ips[n])
                                elif state[int(n)-1] == False:
                                        print("Apagando el terminal", n)
                                        change_terminal_light.main(APAGADO, terminales_ips[n])
                        previous_state[int(n)-1] = state[int(n)-1]
                        time.sleep(0.5)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69296652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档