V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
pc10201
V2EX  ›  Python

python 如何获取未捕获的异常和相关上下文?

  •  
  •   pc10201 · 2015-12-03 10:41:16 +08:00 · 2541 次点击
    这是一个创建于 3272 天前的主题,其中的信息可能已经有所发展或是发生改变。
    python 的异常一般是用 try except 捕获,
    不过这有一个矛盾的点,就是你得知道这一段代码可能会有异常,然后用 try except 包裹住,如果没有发觉,就成了未捕获的异常,然后程序就挂掉了,即使把错误重定向到某个日志文件,也只有很少的错误提醒,没有相关的上下文,比如当时各变量的值。

    web 程序可以用 sentry 来解决这个问题,但是一般的 python 命令行程序如何完美地与 sentry 结合?

    看 sentry 官网的例子是要用 try except 包裹住啊,但是没有包裹住的情况下怎么办呢?或者把所有代码都包裹住?

    或者换一个种说法,我希望在 python 命令行程序能用 sentry 拦截所有的异常,而不需要写 try except 语句。
    5 条回复    2015-12-03 15:40:00 +08:00
    lxy42
        1
    lxy42  
       2015-12-03 10:53:41 +08:00
    sys.last_traceback sys.last_type sys.last_value 配合 atexit 不知道是否可行,你可以试一下
    zhexue69
        2
    zhexue69  
       2015-12-03 11:03:44 +08:00
    总要埋点的
    可以试试在程序主入口调用的地方埋 try except ,然后用 traceback 库读异常信息。
    est
        3
    est  
       2015-12-03 11:05:54 +08:00
    LZ 倒底是想要捕获异常,还是出错了自动重启?

    出错自动重启很简单。用 bash :

    while true; do python xxx.py; done.
    mulog
        4
    mulog  
       2015-12-03 11:09:32 +08:00
    程序入口 try...except... 然后 traceback.print_exc() 呗
    liuxiaoxiaochen
        5
    liuxiaoxiaochen  
       2015-12-03 15:40:00 +08:00
    "console.log([1,2,3].map(x => x * x))" 感觉 @mulog 说的是很对的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 19:22 · PVG 03:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.