为什么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(),在这种情况下,你的代码就不需要再调用一次函数了。