簡體   English   中英

我收到錯誤消息:UnboundLocalError:分配前引用了本地變量'porc'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM