[英]UnboundLocalError: local variable 'error' referenced before assignment
[英]I got error : UnboundLocalError: local variable 'porc' referenced before assignment
我正在嘗試執行此代碼
command3.py
import microgear.client as microgear
import os
os.system("sudo pigpiod")
import pigpio
import RPi.GPIO as GPIO
import subprocess
piMASTER = pigpio.pi()
####################### NETPIE ####################
appid = 'xxxxxxxxx'
gearkey = 'xxxxxxxxxx'
gearsecret = 'xxxxxxxxxxxxxxxxxxxx'
microgear.create(gearkey,gearsecret,appid,{'debugmode': True})
def connection():
print "Now I am connected with netpie"
def subscription(topic,message):
print topic+" "+message
if message == "ON":
proc = subprocess.Popen(["sudo", "python", "LED3.py"], shell = False)
else:
piMASTER.write(4, 0)
proc.terminate()
def disconnect():
print "disconnect is work"
microgear.setalias("switch")
microgear.on_connect = connection
microgear.on_message = subscription
microgear.on_disconnect = disconnect
microgear.subscribe("/mails")
microgear.connect(True)
LED3.py
import time
import pigpio
import RPi.GPIO as GPIO
pi= pigpio.pi()
while True:
pi.write(4, 1) #Set LED pin 7 to HIGH
time.sleep(1) #Delay 1 second
pi.write(4, 0) #Set LED pin 7 to LOW
time.sleep(1)
當消息為“ ON”時收到消息時,LED3.py仍可工作,但如果消息為“ OFF”,則出現此錯誤
Traceback (most recent call last):
File "command3.py", line 47, in <module>
microgear.connect(True)
File "/usr/local/lib/python2.7/dist-packages/microgear/client.py", line 143, in connect
microgear.mqtt_client.loop_forever()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1378, in loop_forever
rc = self.loop(timeout, max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 897, in loop
rc = self.loop_read(max_packets)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1177, in loop_read
rc = self._packet_read()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1766, in _packet_read
rc = self._packet_handle()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2239, in _packet_handle
return self._handle_publish()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2414, in _handle_publish
self._handle_on_message(message)
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2574, in _handle_on_message
self.on_message(self, self._userdata, message)
File "/usr/local/lib/python2.7/dist-packages/microgear/client.py", line 105, in client_on_message
on_message(msg.topic,str(msg.payload))
File "command3.py", line 35, in subscription
proc.terminate()
UnboundLocalError: local variable 'proc' referenced before assignment
*對不起,如果我的英語不好,那么我才剛開始學習python。
顯然,如果message
不是( !=
) "ON"
那么您在引用proc
之前就先引用它,就像錯誤明確指出的那樣:
if message == "ON":
proc = subprocess.Popen(["sudo", "python", "LED3.py"], shell = False) # assigning proc
else:
piMASTER.write(4, 0)
proc.terminate() # referencing proc
如果message
不等於OFF
,Python將執行proc.terminate()
而不定義proc
。
您需要在if
語句之前實例化proc
。 (另一件事是怎么回事-我不清楚哪個subprocess
到底能做什么。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.