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.
BearbeitenDer 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))