热门IT资讯网

Bottle 框架源码学习 三

发表于:2024-11-26 作者:热门IT资讯网编辑
编辑最后更新 2024年11月26日,def run(app=None, server='wsgiref', host='127.0.0.1', port=8080, interval=1, reloader=False,
def run(app=None, server='wsgiref', host='127.0.0.1', port=8080,        interval=1, reloader=False, quiet=False, plugins=None,        debug=None, **kargs):


今天要学习一下bottle里是怎样打印debug信息的

run函数的倒数第二个参数是debug,默认为None

try:    if debug is not None: _debug(debug)

如果设置了debug的值,且不为None,则运行_debug函数

_debug = debug

_debug函数是debug函数的别名,因为和run里的debug变量同名,为了区别,所以用_debug这个名称

def debug(mode=True):    """ Change the debug level.    There is only one debug level supported at the moment."""    global DEBUG    if mode: warnings.simplefilter('default')    DEBUG = bool(mode)


globa DEBUG这句的作用是声明DEBUG这个变量是全局变量,由于要修改它的值,如果不声明为全局变量,则会将DEBUG定义为本函数内的局部变量。

if mode: warnings.simplefilter('default')

warnings.simplefilter定义简单过滤器,如果mode为真,则warnings的过滤器为default,以下是几种过滤器参数,特别要说明的是error过滤器,如果应用了这个过滤器,一旦产生警告信息,则当成错误来处理,不再执行后面的语句。

  • Value

    Disposition

    "error"

    turn matching warnings into exceptions

    "ignore"

    never print matching warnings

    "always"

    always print matching warnings

    "default"

    print the first occurrence of matching warnings for each location where the warning is issued

    "module"

    print the first occurrence of matching warnings for each module where the warning is issued

    "once"

    print only the first occurrence of matching warnings, regardless of location

好了,大概用法已经看懂,再看bottle是怎样应用的

# -*- coding=utf-8 -*-from bottle import Bottle, runapp = Bottle()@app.route('/hello')def hello():    raise Exception("this is my error")    return "Hello World!"run(app, host='localhost', port=8080, reloader=True, debug=True)

将debug设置为True, 并在hello函数里手工制造一个异常。

浏览器里访问http://localhost:8080/hello

结果如下:

Error: 500 Internal Server Error

Sorry, the requested URL 'http://localhost:8080/hello' caused an error:

Internal Server Error

Exception:

Exception('this is my error',)

Traceback:

Traceback (most recent call last):  File "C:\Python27\lib\site-packages\bottle.py", line 862, in _handle    return route.call(**args)  File "C:\Python27\lib\site-packages\bottle.py", line 1740, in wrapper    rv = callback(*a, **ka)  File "D:/myproject/bottleApp/main.py", line 8, in hello    raise Exception("this is my error")Exception: this is my error

看模板源码是怎样设置的

    

Error: `e`.`status`

Sorry, the requested URL {{repr(request.url)}} caused an error:

`e`.`body`
%%if DEBUG and e.exception:

Exception:

{{repr(e.exception)}}
%%end %%if DEBUG and e.traceback:

Traceback:

`e`.`traceback`
%%end


注:如果debug=False,则不会输出Traceback信息,生产环境一般是要关闭的,开发的时候打开方便排错。


0