python cgi教程2——调试

有时数据头出错是很难定位的,除非有权限访问服务器日志。


好在Python有cgitb模块,可以将异常的堆栈信息放在正文中,作为HTML输出。


以下是一个简单的例子:

1
2
3
4
#!/usr/bin/env python
print "Content-Type: text/html\n"
import cgitb; cgitb.enable()
print 1/0

也可以使用handler()方法进行捕获异常处理。

1
2
3
4
5
6
7
8
#!/usr/bin/env python
print "Content-Type: text/html"
print
import cgitb
try:
f = open('non-existent-file.txt', 'r')
except:
cgitb.handler()

还有一种更直接的方法,将数据头设为”text/plain”并把标准错误输出设置到标准输出。

1
2
3
4
5
print "Content-Type: text/plain"
print
import sys
sys.stderr = sys.stdout
f = open('non-existent-file.txt', 'r')

注意:这些只是用于在开发阶段,在生产环境中要把它禁用。以免异常信息被攻击者利用。