如何在Python脚本中查看错误或异常?

Jax*_*nBP 2 python error-handling exception-handling

我对使用Python完全不熟悉(我有PHP背景)

我习惯了PHP的错误处理和日志记录.然而,对于Python,我在一个应该工作的非常简单的脚本上得到500错误.

有没有办法打开Python的错误处理?因为500错误并没有告诉我任何事情,除了有些事情是不对的.

我已经在网上寻找答案,但我找不到解决方案应该是非常明显的.

K Z*_*K Z 6

您的问题是询问如何查看错误或异常(当然不是如何处理,当然您也需要处理这些错误),而且从500 errorPHP背景来看,它似乎意味着您正在使用Python进行Web编程.

在Python中有很多方法可以这样做,这里有一些我倾向于使用的方法:

  1. 在生产中使用logging模块来记录错误.有许多工具可以帮助你,如Sentry [ 源代码在这里 ].你可以阅读更多的记录在这里.
  2. 在开发中,运行您的脚本,python -m pdb myscript.py在脚本中以调试器模式启动脚本,然后输入c(continue)继续脚本直到发生错误,现在您将能够看到交互式PDB(Python调试器)提示中的状态.
  3. 在开发中,如果您正在使用依赖于WSGI的框架(或您的脚本),您可以使用基于浏览器的图形化交互式帮助程序Werkzeug,它允许您在调用堆栈的每个级别进行调试.

并且,为了指出最明显的一个,如果程序崩溃,Python解释器将打印出堆栈跟踪,例如:

? python -c 'pprint "hello"'
  File "<string>", line 1
    pprint "hello"
                 ^
SyntaxError: invalid syntax


# print.py is just one line: print 'hello world'
? python print.py 
  File "print.py", line 1
    pprint 'hello world'
                       ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

更新:

看起来你没有使用任何框架,并且你是一个主机的背后,从它的外观,并没有告诉你它是如何提供你的Python脚本.现在,由于您只需要在浏览器中查看堆栈跟踪,您可以根据主机使用的内容执行以下操作:

如果您的脚本通过CGI在服务器后面运行,那么您需要做的就是使用Python cgitb模块在HTML页面上打印堆栈跟踪:

import cgitb
cgitb.enable()
Run Code Online (Sandbox Code Playgroud)

但是,您注册的共享主机很可能mod_python与Apache一起使用,因此PythonDebug在Apache配置文件中打开应该在浏览器中打印堆栈跟踪:

PythonDebug On
Run Code Online (Sandbox Code Playgroud)

对于Apache mod_wsgi,有一篇比我在这里总结的更好的文章:mod_wsgi调试技术