【问题标题】:Keep simpleserver active even on syntax errors即使出现语法错误,也保持 simpleserver 处于活动状态
【发布时间】:2012-08-03 17:04:02
【问题描述】:

有没有办法配置 Flask 用来在每个语法错误时退出的简单服务器?

app = Flask(__name__)
app.run(host='0.0.0.0', debug=True, use_debugger=True, passthrough_errors=False);

目前我正在将此设置用于简单服务器。 将 passthrough_errors 设置为 False 意味着大多数错误实际上使进程保持活动状态,以便我可以使用交互式调试器,但语法错误仍然会退出程序。我尝试了不同的配置值,但没有找到任何可行的方法。谢谢!

【问题讨论】:

标签: python flask wsgi werkzeug


【解决方案1】:

根据 Python 文档,有两种类型或错误:

  1. 语法错误
  2. 例外情况

解析时间期间会产生语法错误(此时您的代码实际执行,因此您不可能捕获错误,因为解析时间不是运行时,当您的代码实际执行时)。

捕获语法错误的唯一方法是当它们发生在作为 exec 函数的参数给出的一段代码中(执行 python 代码字符串):

>>> try:
...     exec('x===6')
... except SyntaxError:
...     print('Hello!')
...
Hello!

但是你必须记住只有在你真正知道你在做什么的时候才使用 exec()。不建议使用 exec() 尤其是当它依赖于用户输入时。

【讨论】:

  • 真的没有办法让服务器保持活跃吗?不断重启服务器似乎是一个非常烦人的问题。
  • 在 Python 中,语法错误只是另一种异常类型。您可以在调用 exec() 时捕获它们,但您也可以在导入时捕获它们。只需将您的导入包装在 try/except 中,您也可以在那里捕获 SyntaxError。
【解决方案2】:

我刚刚发布了一个Flask-Failsafe 扩展来解决这个确切的问题。

我一直都遇到这个问题,并在早些时候浏览了您的帖子以寻找解决方案。经过一番试验,我破解了一个装饰器,你可以用它来包装你的初始化代码,这样如果它失败,重新加载器将继续工作。看看吧,让我知道你的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多