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
xiaomacai
V2EX  ›  Python

Python 程序报错处理问题

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

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

    try:

        ********
    

    except Exception, e:

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

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