我有一个像这样的Python类:
class StreckenLocatorClient():
def autoCompleteAsync(self, pattern: str, callback: Callable[[list[str]], None]):
fetcher = QgsNetworkContentFetcher()
def onFinished():
reply = json.loads(fetcher.contentAsString())
theList = list(map(lambda o: str(o["value"]), reply))
callback(theList)
fetcher.finished.connect(onFinished)
request = QNetworkRequest(QUrl("Whatever"))
fetcher.fetchContent(request)
加载该模块时,我从标题中得到异常。我知道
fetcher
是封闭范围内的自由变量。但是,它在内部函数中使用之前已初始化。另外,根据我对内部作用域和外部作用域的理解,这里不存在命名冲突,所以我应该在这里做什么?
我已经尝试过
None
检查 fetcher
变量。然而,这会导致同样的异常:
def onFinished():
if fetcher is None:
return
我可以捕获异常:
def onFinished():
try:
fetcher
except:
return
然而,这感觉真的不对,特别是因为
fetcher
实际上应该根据我的理解来定义。
我正在使用 PyQGIS,其中
fetcher.finished
是一个信号。
这可能是由于语法错误或您尚未将变量设置为全局造成的。
您的新代码
class StreckenLocatorClient():
def autoCompleteAsync(self, pattern: str, callback: Callable[[list[str]], None]):
fetcher = QgsNetworkContentFetcher()
global fetcher # IMPORTANT!!
def onFinished():
reply = json.loads(fetcher.contentAsString())
theList = list(map(lambda o: str(o["value"]), reply))
callback(theList)
fetcher.finished.connect(onFinished)
request = QNetworkRequest(QUrl("Whatever"))
fetcher.fetchContent(request)
任何改变答案的意见都可以:D