2016-06-10 12 views
-1

I haben eine Funktion, die den Verschluss auf einer Kamera festlegt und nimmt einen Schwimmer als Eingabe:Schlüsselfehler, wenn kein Wörterbuch erforderlich ist

def changeShutter(value): 
    global camera, shutter 
    shutter['abs_value']+=value 
    try: 
     camera.set_property(**shutter) 
    except: 
     print "could not set shutter" 

wo shutter ein Wörterbuch alle Eigenschaften für den Verschluß erforderliche enthält, ist, und abs_value ist der Schlüssel, dessen Wert geändert und dann festgelegt werden muss.

Ich kann dies leicht genug in einem Jupyter Notebook nennen, das ich für die Entwicklung mit changeShutter(0.05) verwende und es funktioniert gut.

Ich habe dann eine einfache html-Taste auf einer Webseite erstellt, die eine Nachricht an einen Flask-Socket-Server mit der changeShutter-Funktion sendet und abhängig von der gedrückten Taste und der so gesendeten Nachricht 0,05 oder -0,05 wie unten analysiert :

@socketio.on('shutter request', namespace='/test') 
def changeShutter(message): 
    request = message['data'] 
    print 'Shutter request received: %s' %request 
    if str(request) == "shutter increase": 
     changeShutter(0.05) 
    elif str(request) == "shutter decrease": 
     changeShutter(-0.05) 

ich mich an einen key error: 0.05 aus irgendeinem Grund wirft es klar wird eine der zwei möglichen Optionen und korrekt die richtige if Anweisung eingeben (I-Debugging mit zusätzlichen Druckanweisungen versucht haben), aber.

Wenn die Funktion keine Wörterbucheingabe benötigt, warum bekomme ich einen Schlüsselfehler?

+1

Warum heißt Ihre Flaschenfunktion 'changeShutter'? 'changeShutter (0.05)' ruft am Ende 'changeShutter (message)' und damit keyerror auf. – Dheerendra

+0

Perfekt. Habe das gerade bemerkt und versucht, die Antwort einzureichen, nur um zu finden, dass du es auch gefunden hast. Tausend Dank! – Fonty

+0

Verwenden Sie Namespacing. Verwenden Sie keine Globals. Ihr Programmierstil ist das Problem. Was erwarten Sie, wenn Sie zwei Funktionen mit exakt demselben Namen definieren? –

Antwort

0

Wie in den Kommentaren oben erwähnt, war dies ein dummer Fehler, wo ich 2 verschiedene Funktionen mit dem gleichen Namen hatte.

Verwandte Themen