我有一个脚本,我想从文件中导入dict,然后用它执行函数。你知道吗
文件codes.py
如下所示:
rf_433mhz = {
"0x471d5c" : sensor_LaundryDoor,
}
它使用的文件如下:
#!/usr/bin/python
import mosquitto
import json
import time
def sensor_LaundryDoor():
print "Laundry Door Opened"
mqttc.publish("actuators", json.dumps(["switch_HallLight", "on"]))
from codes import rf_433mhz
但是我得到了一个NameError
。你知道吗
Traceback (most recent call last):
File "sensors.py", line 11, in <module>
from codes import rf_433mhz
File "/root/ha/modules/processing/codes.py", line 2, in <module>
"0x471d5c" : sensor_LaundryDoor,
NameError: name 'sensor_LaundryDoor' is not defined
有什么办法可以做我想做的吗?它似乎被困在没有函数在codes.py
我试图调用sensor_LaundryDoor()
,如下所示
def on_message(msg):
inbound = json.loads(msg.payload)
medium = inbound[0]
content = inbound[1]
if str(medium) == "433mhz":
try:
rf_433mhz[str(content)]()
except:
print "Sorry code " + content + " is not setup"
有很多黑客的方法可以解决这个问题,但看起来真正的问题是您试图用Python编写C风格的代码。Python的方法是在使用前将
sensor_LaundryDoor
导入codes.py
,如果这引入了循环引用,那么这就是设计问题。你知道吗也许您需要三个模块,
events.py
和主循环,主循环从codes.py
导入dict,主循环从sensors.py
导入函数。你知道吗问题是,在您要导入的词典中,您将
0x471d5c
的值设置为一个未定义或未在该范围内定义的变量。你知道吗例如:
你知道吗代码.py你知道吗
主要文件
import
不是include
。它不会转储代码.py在你的脚本中;相反,它运行代码.py在它自己的命名空间中,几乎像一个单独的脚本,然后将模块对象或特定模块内容分配给导入所在的命名空间中的名称。在的命名空间中代码.py,没有sensor_LaundryDoor
变量。你知道吗将代码划分为模块的方法不是很有用。理解代码.py,您需要了解另一个文件才能知道
sensor_LaundryDoor
是什么。要理解另一个文件,您需要理解代码.py知道你要进口什么。这种循环依赖关系将否定模块化代码的大部分好处,即使它不是一个错误。重新组织代码以修复循环依赖关系,可能还会修复NameError
。你知道吗相关问题 更多 >
编程相关推荐