您的位置:

为什么NoAppException(f"Function reference must be a simple name: {app_name!r}."),怎么解决

  发布时间:2023-02-10 07:43:41
报错的原因这个错误消息表明你在使用 Flask 时出现了一个错误,该错误是由 `NoAppException` 引发的,它表明应用程序函数引用必须是简单名称。使用例子是的,例如在这里是一个使用单独的应用程序工厂的示例这里, `create_app` 函数返回了一个 Flask 应用程序实例,而不是一个函数调用。或者如果你喜欢这样写在这种情况下,create_app()函数直接返回了app,而不是app(),在这种情况下,你的代码就不需要再调用一次函数了。

报错的原因

这个错误消息表明你在使用 Flask 时出现了一个错误,该错误是由 `NoAppException` 引发的,它表明应用程序函数引用必须是简单名称。

这通常是由于在创建 Flask 应用程序实例时,将应用程序函数作为一个调用,而不是一个简单的名称传递给了`Flask`函数,导致这个错误。 例如,如果你有这样一个应用程序函数:


def create_app():
    app = Flask(__name__)
    # ...
    return app

你需要这样做:


app = create_app()

而不是这样:


app = create_app()()

如何解决

解决这个问题的一种方法是确保传递给 `Flask` 函数的应用程序函数是一个简单的名称,而不是一个函数调用。这可以通过更改代码来实现,例如,如果你当前正在这样做:


app = Flask(__name__)()

更改为:


app = Flask(__name__)

如果你不想改变代码结构,可以使用其他方法来解决这个问题,例如通过重写你的应用程序函数来确保它返回一个 Flask 应用程序实例而不是一个调用。

例如,如果你有这样一个应用程序函数:


def create_app():
    app = Flask(__name__)
    # ...
    return app

你可以这样做:


app = create_app

或者在 create_app() 函数里面调用app,返回app,这样就可以在调用函数时直接返回app,而不用再加一层括号。

这样就可以避免"Function reference must be a simple name"的问题了。

使用例子

是的,例如在这里是一个使用单独的应用程序工厂的示例:


from flask import Flask

def create_app():
    app = Flask(__name__)
    # configure the app here
    # ...

    @app.route('/')
    def hello():
        return 'Hello, World!'
    return app

app = create_app()

if __name__ == '__main__':
    app.run()

这里, `create_app` 函数返回了一个 Flask 应用程序实例,而不是一个函数调用。然后将应用程序实例赋值给全局变量 `app`,在这种情况下,这个应用程序实例可以由你自己的代码以及 Flask 提供的脚本直接使用。

或者如果你喜欢这样写:


from flask import Flask

def create_app():
    app = Flask(__name__)
    # configure the app here
    # ...

    @app.route('/')
    def hello():
        return 'Hello, World!'
    return app()

app = create_app

if __name__ == '__main__':
    app.run()

在这种情况下,create_app()函数直接返回了app,而不是app(),在这种情况下,你的代码就不需要再调用一次函数了。