首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

Python 程序报错处理问题

  •  
  •   xiaomacai · 2017-07-20 10:14:21 +08:00 · 1549 次点击
    这是一个创建于 870 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果一段程序可能出错就用 try except Exception 处理是不是一个好的办法,如果不是那么如何处理更优一些? 如:

    try:

        ********
    

    except Exception, e:

        print e
    
        continue
    
    10 回复  |  直到 2017-07-20 17:08:37 +08:00
        1
    lxml   2017-07-20 10:58:13 +08:00
    个人理解,预判可能出现错误 try except 是一个好办法,对错误处理区别处理才是个问题,原则性错误还是方向性错误,有的错误(比如网络)不影响直接 pass 掉重试就可以了,但比如用户输入错误这个不可接受的就得 raise 抛出。
        2
    widewing   2017-07-20 11:10:11 +08:00 via Android
    除非你是框架,否则只处理明确定义的异常,不要处理 exception
        3
    fisher335   2017-07-20 11:22:54 +08:00 via iPhone
    因为 try 里面会有很多信用的包,你这么写会吞掉保存!我比较反感动不动就 try 的。我认为在必要的时候用,不要动不动就 try
        4
    guyskk   2017-07-20 11:35:57 +08:00 via Android
    捕获异常一定要明白自己的目的!我见过很多不知道为啥报错,直接就 try except 然后返回个错误信息 '出现错误',用户心里肯定一万个草泥马:你倒是告诉我出啥错了呀?

    这种处理对用户没有任何帮助,开发者也非常难排查错误。更好的处理方式:
    1. 让它报错
    2. 程序入口统一处理这类异常,比如发送到 sentry,或者记录日志并提示用户发送错误日志
        5
    mansur   2017-07-20 11:36:58 +08:00
    @fi traceback.print_exc() 就不会被吞掉了
        6
    mansur   2017-07-20 11:37:26 +08:00
    @fisher335 traceback.print_exc() 就不会被吞掉了
        7
    CryMeatel   2017-07-20 11:42:21 +08:00
    logger.exception('xxx')
        8
    wyntergreg   2017-07-20 15:39:57 +08:00
    except Exception 是最后用的
    前边应该 except 各种 Exception
        9
    hugo775128583   2017-07-20 15:47:15 +08:00 via Android
    既然知道可能出错,为什么不能确定他会出什么错,然后修复或者是 catch。直接 Exception 不够妥当
        10
    hagezhou   2017-07-20 17:08:37 +08:00 via iPhone
    如果看到源码或者一些框架,他们习惯于在内部都用 raise,可以用 puthon 自带的错误类型,也可以自己封装,try 在最外层,这样方便统一处理
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2250 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
    ♥ Do have faith in what you're doing.