在构建烧瓶应用程序时进行测试和调试时,幸运的是,可以使用大量工具和框架 - 有些甚至已经内置了!但是,正如许多程序员已经知道的那样,仅依靠这些方法可能太容易了,在遇到遇到几乎不可能解码的错误时,杂草中留下了一个。实际上,有几个原因为什么知道如何在烧瓶中手动调试不仅是一项重要技能,而且是一种真正宝贵的维护习惯。这里有几个例子:
- 它为开发人员提供了更大的灵活性和控制在调试过程中。您可以更仔细地依靠问题的根本原因进行区分,并量身定制您的技术(即打印语句,日志或断点)以适合情况和/或您的特定目标。
- 很少有方法可以加深您的理解其执行流比能够将错误分解成咬合大小的碎片更有价值,并真正揭示了错误的来源。 。当您最终能够通过更具体的理解导致错误和/或如何紧密地关注的方式,您最终能够超越错误和/或如何紧密地构成,这可能会花费一部分工作时间,而不是积极地构建,这可能会令人烦恼。它影响了您的代码的其他部分,您的时间仍然花在了好处!
- 因为它不需要任何其他工具或框架,并且可以手动调试通常是非侵入性。此外,它可以完全直接直接在代码库中,而无需增加外部依赖关系。
- 除了仅仅是一个好习惯外,还可以在其他项目和框架上应用几种手动调试技术,使其成为一种极其便携式技能。
- 尽管调试的过程通常会感到耗时,但手动调试非常快速而简单'它不依赖于广泛的配置,也不依赖于其他设置时间用于其他调试工具或库。当从事需要快速周转的项目时,这特别有益。
现在,显然有无数情况,调试工具,框架或集成的开发环境(简称为IDE)是理想的 - 他们可以提供高级功能,自动断点和实时检查调试过程感觉更简单,效率更高,尤其是在处理大型代码库时,因此本文的重点不是贬值常见的调试工具和框架,只是强调为什么知道如何(经常练习)手动调试错误是如此重要的技巧和习惯。
继续,这里有一些常见的烧瓶错误以及如何调试它们,逐步:
首先,这里是一个简单的烧瓶应用程序的代码段
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Welcome to the home page!'
if __name__ == '__main__':
app.run(debug=True)
让我们看看我们尝试扩展它时会发生什么。
404找不到
- 它的含义是:烧瓶应用程序中不存在请求的路由或URL。请参阅下面的示例:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Welcome to the home page!'
@app.route('/about')
def about():
return 'This is the about page.'
if __name__ == '__main__':
app.run(debug=True)
请注意,我们在新的路线上写了“/关于”,但是没有相应的路线处理程序,因此,如果您尝试在诸如Curl或Postman之类的工具中访问URL,您可能会遇到以下控制台错误:
404 Not Found: The requested URL was not found on the server. If you entered the URL manually, please check your spelling and try again.
- 首先,查看代码并确保已定义了正确的路线
- 然后,检查路由定义中的任何错别字或语法错误
- 接下来,请验证在进行任何代码更改后重新启动烧瓶服务器
- 如果确定代码是正确的,请仔细检查URL以确保其与精确的路由定义匹配
- 如果问题持续存在,则可以在路由处理程序中添加打印语句和/或记录消息(这将跟踪执行流并确保调用处理程序功能),例如:
@app.route('/about')
def about():
print('Inside the about route handler')
return 'This is the about page.'
控制台输出将帮助您确定路由处理程序是否已到达,或者问题是否位于其他地方。
此外,您可以将烧瓶调试器设置设置为'debug=True'
,并有意触发例外。例如,可以在路由处理程序中添加以下行:
raise Exception('Testing 404 error handling')
405方法不允许
- 这是什么意思:如果不允许使用烧瓶应用程序指定路由的请求的HTTP方法
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Welcome to the home page!'
@app.route('/about', methods=['GET'])
def about():
return 'This is the about page.'
if __name__ == '__main__':
app.run(debug=True)
您会注意到上面的“/大约”页面的路由仅用于在方法参数中获取请求。让我们假设您正在尝试提出帖子请求,您会提出以下错误:
405 Method Not Allowed: The method is not allowed for the requested URL.
- 要进行故障排除,您首先要仔细检查路由装饰方法中指定的允许方法是否在代码中准确
- 然后,仔细检查卷发或邮递员请求中使用的HTTP方法是否匹配代码中写的允许方法
- 同样,请确保代码不限于特定的HTTP方法,如果是,则该方法与预期的操作匹配
- 如果问题持续存在,请在路由处理程序中添加打印语句或记录消息,如上所述404错误:
@app.route('/about', methods=['GET'])
def about():
print('Inside the about route handler')
return 'This is the about page.'
- 此外,您可以检查路由处理程序中的请求对象(
'request.method'
)以验证所使用的实际HTTP方法。
500内部服务器错误
- 这是什么意思:执行烧瓶应用程序期间发生了一个未手动的异常或错误
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Welcome to the home page!'
@app.route('/about')
def about():
# Simulating a server error by accessing an undefined variable
result = 10 / 0
return 'This is the about page.'
if __name__ == '__main__':
app.run(debug=True)
诚然,上面的摘要将通过将数字除以零来自动诱导'/about'
路由中的服务器错误。但是,再次使用Curl或Postman,我们将尝试调试此错误,逐步:
- 首先,确保您尝试访问HTTP处理工具中的正确路由。如果不正确,您可能会遇到以下错误,这意味着在执行过程中发生了未经治疗的例外:
500 Internal Server Error: Internal Server Error
- 控制台输出还应显示回溯,其中包含有关该错误的更多详细信息。
ZeroDivisionError: division by zero
- 可以通过删除或解决有问题的行来解决此错误。对于这种特定情况,它可以用有效的计算替换,也可以完全删除:
This error can be resolved by removing or resolving the problematic line. For this specific case, it can can replaced with a valid calculation or simply removed altogether:
- 如果Trackback没有帮助您识别错误,请考虑使用处理程序添加打印语句,如较早的错误示例所示。
- 最后,重新启动烧瓶服务器并重试访问问题路线以确认是否已解决该错误
诚然,我们只是开始刮擦一个人在烧瓶中编写和故障排除代码时可能遇到的错误表面,但我希望本指南能够帮助其他新手程序员,以对某些最常见的错误进行故障排除。烧瓶,因为这肯定是一个习惯,我一直在努力在自己的代码编写中更好地结合起来。