如何以类似PHP的方式显示Python Web应用程序异常

时间:2013-02-22 19:31:18

标签: python exception-handling cgi

在这个项目中我必须使用Python作为一个网站,我正在寻找错误进入我的浏览器,而不是获得500页。任何提示?
添加
我只是使用普通的CGI没什么特别的 我按照here的解释尝试了这个,但它不起作用

#!/usr/bin/env python
print "Content-Type: text/plain"
print
import sys
sys.stderr = sys.stdout
f = open('non-existent-file.txt', 'r')

2 个答案:

答案 0 :(得分:2)

这取决于您的Python Web框架设置。

例如,Pyramid框架有各种设置,可以在Web浏览器中启用回溯并启动交互式调试会话:

http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/introduction.html#debugging-settings

这完全取决于您的Python Web应用程序的连接方式以及它使用的架构等等。请在问题中包含完整的上下文信息以获得进一步的帮助。

有关使用Python和WSGI调试Web应用程序的更多信息:

http://code.google.com/p/modwsgi/wiki/DebuggingTechniques

如果您没有使用任何框架,您需要将所有内容放在主级别中尝试...除了块,因为Python标准库不提供将异常转换为HTML的工具。

  import traceback

  try:
       ...
  except Exception as e:
       # Set content type as text/plain (don't know how)
       traceback.print_exc(e)  # Print out exception as plain text

答案 1 :(得分:0)

我最终创建了一个脚本,读取error.log中的错误。 因此,您不必在同一个标​​签中显示错误,而是为其提供另一个标签。但是,不要忘记删除脚本,避免提供有关系统的信息。

#! /opt/python3/bin/python3
#Error Log Viewer

import subprocess

p = subprocess.Popen('cat /var/log/apache2/error.log | tail -5', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

print ('Content-type: text/html\n\n') 
print (''' 
<!DOCTYPE html >
<html> <head></head> <body>''')
for line in p.stdout.readlines():
    print (line,'<br>')
print('''</html></body>''')