2017-05-24 1 views
-2

Ich habe folgende Probleme in Python, aber ich habe keine Ahnung, warum:"Nameerror: global Name 'ser' ist nicht definiert" Python twitter

"Traceback (most recent call last): File 
C:/Users/W7-32/Downloads/TW31.py", line 82, in <module> 
    driptwit() ## Llamada a la funcion driptwit File "C:/Users/W7-32/Downloads/TW31.py", line 71, in driptwit 
    ser.write("1") NameError: global name 'ser' is not defined 

Der Quellcode:

# lIBRERIAS 

import twitter 
import tweepy 
import serial 
import time 
import threading 
import os 
import datetime 

##Consumer y Access de Twitter Developers from tweepy import API 
consumer_key = 'QpaLpmQOS0DMTt2hFxy5WN40i' 
consumer_secret = 'WoUssPI9gIdiEIu0LSWG2bvGuAlvF8WTDStdFTkj5OIPwbeLth' 
access_token_key = '935906436-aMBTKoPOZshZhCRRil1vNCTUKPxQBSiuXe181hLp' 
access_token_secret = 'pxYs26cMqxQbhxQtgfIGnUjWGP1eLlK9mVxdaLeorPfZ4' 

#Autenticacion y conexion con Twitter 
#auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
##auth.set_access_token(access_token_key, access_token_secret) 

#api = tweepy.api(consumer_key, consumer_secret, access_token_key, >  access_token_secret) 
#api=tweepy.API(auth) 
##Declaracion del puerto serial 

auth=tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token_key, access_token_secret) 

api=tweepy.API(auth) 


locations = ['COM3','COM4','COM5','COM6'] 

for device in locations: 

    try: 

     ser = serial.Serial(device, baudrate=9600, bytesize=8, 

     parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE) 

     print ("\nArduino found on: " + ser.portstr + " please >  wait...\n") 
     time.sleep(2) 
     break 
    except: 
       print "Failed to connect on", device 

## check serial port 
def checkokay(): 
    ser.flushInput() 
    time.sleep(3) 
    line = ser.readline() 
    time.sleep(3) 
    if line == ' ': 
     line = ser.readline() 
    print("here") 


print('Bienvenido a Print_Twitter') 


def driptwit(): 
    status = [] 
    x = 0 
    status = api.user_timeline('FerCMejia') ##grab latest statuses 
    checkit = [s.text for s in status] ##put status in an array 
    drip = checkit[0].split() ##split first tweet into words 

    ## check for match and write to serial if match 
    if (drip[0] == '#dripPrint'): 
     print("Recibiendo Twitter, Imprimiendo") 
     ser.write("1") 
    else: 
     if drip[0] == '#dripPrintStop': ##break if done 
      ser.write("0") 
      print("Impresion detenida, esperando instruccion") 
     else: 
       print("Esperando Tweet") 
       ser.write("0") 


while 1: 
     driptwit() ## Llamada a la funcion driptwit 
     time.sleep(20) ## Espera de 20 seg para volver a leer el status 

Obwohl der Port das Arduino verbunden hat, gibt es mir den Fehler, undefiniert zu sein. Hier

ist das Py-Archiv:

Archive Python

Ich benutze PyCharm und die python2.7-Interpreter, Windows7 32 Bit.

+4

Bitte zeigen Sie Ihren Code in Ihrer Frage. Höchstwahrscheinlich versuchen Sie einen Namen zu verwenden, der entweder falsch geschrieben oder nicht im Gültigkeitsbereich ist. – cdarke

+0

abgeordnet. Zusätzlich zu der Tatsache, dass Links wie Mega verdächtig sind, sollten Sie Ihren Code auf ein [mcve] reduzieren, um das Problem zu isolieren, anstatt uns zu bitten, unsere Zeit damit zu verbringen, da die Community ihre Zeit zur Verfügung stellt. –

+0

Fertig, ist es jetzt korrekt? Vielen Dank !! –

Antwort

0

ser ist keine globale Variable. Sie definieren es innerhalb Ihrer for-Schleife, daher ist sein Umfang auf diese Schleife beschränkt. Über der for-Schleife tun Sie dies:

ser = None 
for device in locations: 

Dies macht seinen Umfang nicht nur auf die for-Schleife beschränkt. Die for-Schleife verwendet jetzt die Variable, die gerade definiert wurde, als sie in der Schleife aufgerufen wurde. Dann, im Körper der Funktionen, möchten Sie das global Schlüsselwort an der Spitze hinzufügen, um sicher zu sein, dass wenn Sie ser aufrufen, es die globale Variable bekommt, nicht versuchend, eine neue zu schaffen. Wie folgt aus:

def checkokay(): 
    global ser 
    ser.flushInput() 

Samen in der anderen Funktion:

def driptwit(): 
    global ser 
    status = [] 

Jetzt Ihre Variable ist global und Ihre Funktionen, die globale Version der Variablen verwenden.

Verwandte Themen