在装饰器定义中未引用的局部变量

问题描述 投票:-1回答:1

我的代码很奇怪,我不明白为什么。

这里是代码:

from django.urls import path


app_name = 'portal'
urlpatterns = []

def route(url, name=""):

    def dec(f):
        urlpatterns.append(
            path(url, f, name=f.__name__)
        )   
        return f
    return dec 

from . import views                  
# 2) The decorator call in the other file
from . import urls

@urls.route("/my_function")
def my_function():
    print("Hello world")

我在UnboundLocalError上得到一个name

 File "urls.py", line 10, in dec
    if name == "":
UnboundLocalError: local variable 'name' referenced before assignment

name应该默认设置为"",我不知道问题出在哪里。奇怪的是,如果我运行相同的代码并将装饰器更改为:

urlpatterns = []

def route(url, name=""):

    def dec(f):
        if name == "":
            print("I work!")
        urlpatterns.append(
            path(url, f, name=name)
        )
        return f
    return dec

它可以正常工作并输出:

I work ! 

当问题应该来自if name == ""行时>

PS:我正在django上编程,此行在urls.py文件中。

我的代码很奇怪,我不明白为什么。这是代码:从django.urls导入路径app_name ='portal'urlpatterns = [] def route(url,name =“”):def dec(f):urlpatterns ....

python django python-decorators
1个回答
0
投票

答案是您未发布的部分。您的真实代码实际上看起来像

© www.soinside.com 2019 - 2024. All rights reserved.