Python-Schließung, Fehler beim Gültigkeitsbereich lokaler Variablen

Meine Funktion schmeißt mich mit demlocal variable 'pt' referenced before assignment Error:

Traceback (most recent call last):
  File "/home/solesschong/Workspace/PenPal/python/main.py", line 126, in callback
    ind = (i+pt) % n
UnboundLocalError: local variable 'pt' referenced before assignment

Der Code lautet wie folgt

def get_audio_callback(pt):

    def callback(in_data, frame_count, time_info, status):

        for i in range(frame_count):
            ind = (i+pt) % n

        return (a, b)

    return callback

und im globalen Rahmen,

pt = 0
stream = p.open(stream_callback=get_audio_callback(pt))

Ich kann nicht herausfinden, warum der Fehler auftritt, da ich beim Schließen einige Beispiele überprüft habe und keinen Unterschied festgestellt habe.

Bearbeiten

Der Grund, warum Sie den Fehler nicht reproduzieren können, könnte in der von @Martijn Pieters erwähnten Übervereinfachung liegen. Daher der ursprüngliche Code.

Weiterhin habe ich dieses Problem durch Referenzübergabe gelöst, siehe bitte meine eigene Antwort.

"""
Sound API
"""
def get_audio_callback(pt):

    def callback(in_data, frame_count, time_info, status):
        """
        This is the callback function for sound API
        In each call, synthesized data is dumpped into the sound buffer
        """        

        wave = np.ndarray((frame_count, 2))
        for i in range(frame_count):
            ind = (i+pt) % n
            wave[i,0] = float(x[ind]) * 2
            wave[i,1] = float(y[ind]) * 2
        pt = pt + frame_count

        return (encode(wave), pyaudio.paContinue)

    return callback


p = pyaudio.PyAudio()
pt = 0

stream = p.open(format=pyaudio.paFloat32,
                channels=2,
                rate=RATE,
                output=True,
                stream_callback=get_audio_callback(pt))

Antworten auf die Frage(2)

Ihre Antwort auf die Frage