推荐学习书目
› 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
yezheyu
V2EX  ›  Python

请教下老哥,实际开发中哪些地方必须使用 try...except...

  •  
  •   yezheyu · Mar 17, 2021 · 5270 views
    This topic created in 2057 days ago, the information mentioned may be changed or developed.

    新手,务笑!

    我知道 try 使用范围是在你觉得可能出错的地方使用,但实际开发中,哪些算是呢?

    常常忘记使用 try (除了那些自己设计的异常类,需要手动捕获的)

    我知道的有涉及到文件打开读写,数据库的读写

    还有哪些现实开发中需要使用 try 的地方吗?

    29 replies  •  2021-03-18 16:59:38 +08:00
    knightdf
    knightdf
    Mar 17, 2021
    1
    就好比你现在上网,你怎么知道一定能打开网页呢?你得 try 吧,万一你网线断了,你网络不通,你网太慢打开超时了, 或者你打开的网页内容不对,看不懂,这不都是可能出的错么
    acmore
    acmore
    Mar 17, 2021
    2
    例如网络请求,数据解析,格式转换等方面都常用。

    核心不在于找到错误而是在于:
    1. 解决错误( retry, bypass, default value ...)使程序回到正常流程;
    2. 尽早通知用户发生了需要人为介入处理的情况;
    huijiewei
    huijiewei
    Mar 17, 2021❤️8
    3
    非自己可控的数据流
    zhaorunze
    zhaorunze
    Mar 17, 2021❤️1
    4
    不是你写的代码都需要
    Orenoid
    Orenoid
    Mar 17, 2021❤️1
    5
    当你不希望不可控的错误一路上抛到程序最顶层的时候
    Pagliacii
    Pagliacii
    Mar 17, 2021
    6
    当你需要调用代码,而又没有办法确保被调用的代码能正确执行时,就需要用捕获可能出现的异常。然后调用方再做相应的处理。
    MeteorCat
    MeteorCat
    Mar 17, 2021 via Android
    7
    网络请求最明显,你永远不知道是断网还是 dns 出错或者啥奇奇怪怪的原因
    touchwithe
    touchwithe
    Mar 17, 2021 via iPhone
    8
    总结一下就是各种 io 操作,包括但不限于网络请求、文件读者、数据库 crud...
    ebingtel
    ebingtel
    Mar 17, 2021❤️1
    9
    1 、不想导致本 进 /线 /协 程挂掉的
    2 、不想暴露底层错误细节的
    QBugHunter
    QBugHunter
    Mar 17, 2021
    10
    try
    openFile
    catch

    要是这个文件不存在肿么办?要是这个文件没有权限肿么办?要是文件类型错误肿么办?
    darksword21
    darksword21
    Mar 17, 2021 via iPhone
    11
    直接用 go
    no1xsyzy
    no1xsyzy
    Mar 17, 2021
    12
    调用不是你写的代码,并且不接受上抛的情况
    walpurgis
    walpurgis
    Mar 17, 2021
    13
    其实对于这类设计问题最好是去研究为什么这样设计,解决了什么问题,而不是记住什么时候用,可以搜一下没有异常处理的语言是怎么处理的
    xuanbg
    xuanbg
    Mar 17, 2021
    14
    不希望抛出异常的时候
    maloneleo88
    maloneleo88
    Mar 17, 2021
    15
    写完要试运行啊,肯定 BUG 多多
    不可控的地方都要用。某些时候不仅用一次。

    要 try:
    try:
    try:
    except:
    except:
    except:

    这东西永远无法预估,就是一个不断解决问题的过程。

    我学的过程就是,稀里糊涂写了几百行代码。所有函数全在一起,运行起来都要卡机(因为用 pycharm 打开的)。然后就是 bug 重重,然后不断的改,不会的就出来问,好心人还是很多的。(过嘴瘾的也有,不理就好了。)

    然后就是不断的改,修,补,一直到最后,学着把各个功能归类,分装到不同的模块,慢慢就有条理了。也理解了刚开始一直弄不明白的面对对象而非面对流程。

    然后就舒服多了。主程序空壳一个,加一些基本的东西和注释。
    各个模块有各个模块的作用,各个函数有各个函数的功能。
    没什么 BUG 了,即使有,秒找出来。因为清晰了,有个宏观的概念了。也不用牵一发动全身了。

    要俯视这件事情,不要置身其中。

    我这段时间的学习经验。

    先动手吧,真有问题再问,而不是预计会有什么问题。能预估到的问题都不是问题。

    为一个目的而去做一件事,而不是把这件事看懂了,再去做。 因为永远都不能置身事外看懂内在。
    renmu123
    renmu123
    Mar 17, 2021 via Android
    16
    Python 的 try 是非常轻量的操作,社区甚至推崇用 try 来代替一定的 if
    maloneleo88
    maloneleo88
    Mar 17, 2021
    17
    就算没有用到的地方,我也认为尽量把程序写进 try 里,保证其他部分的程序可以正常运行。。。我抓数据,基本用了无数个 try, 各种突发情况简直措不及防。 :DDDD
    pastgift
    pastgift
    Mar 17, 2021 via iPhone
    18
    也有取深层 json 字段,但结构可能不正确的时候

    try:
    data = j['a']['b']['c']
    except KeyError as e:
    data = None

    if data is None:
    pass
    WhiteDragon96
    WhiteDragon96
    Mar 17, 2021
    19
    一般我会把所有的业务都写 try catch
    jzmws
    jzmws
    Mar 17, 2021
    20
    外部的 , 不是主要业务流程 (失败了有补偿机制的)
    mumbler
    mumbler
    Mar 17, 2021 via Android
    21
    无法预料的输入
    sudoy
    sudoy
    Mar 17, 2021
    22
    楼上正解,无法预料输入的时候一般用 try
    ClericPy
    ClericPy
    Mar 17, 2021
    23
    必不必须我不知道, 遇到层层嵌套的函数或者条件, 普通的 return 或者 break 已经无法跳出去的时候, 我就直接自定义个 Exception 然后 raise 出去... 比如深层 retry

    我就是这么骚气
    Variazioni
    Variazioni
    Mar 18, 2021
    24
    还是经验太少。。写个两年代码你自然就明白了。。。
    zm8m93Q1e5otOC69
    zm8m93Q1e5otOC69
    Mar 18, 2021
    25
    @WhiteDragon96 慢的要死,try 有额外开销
    luckyc
    luckyc
    Mar 18, 2021
    26
    知道可能会有出错的风险就 try
    aeron
    aeron
    Mar 18, 2021
    27
    @renmu123 卧槽,我就是这么干的
    ch2
    ch2
    Mar 18, 2021
    28
    当你的系统必须为不可靠的输入输出买单,而你又不知道到底会出现什么不靠谱的情况的时候
    cominghome
    cominghome
    Mar 18, 2021
    29
    有两种情况,
    1. 知道这里可能会出错,并且这个错误有办法处理,就针对性地 catch 起来
    2. 不知道这里会不会出错,但是不希望错误扩散,就套一个大的 Exception 都抓起来
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4950 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 01:35 · PVG 09:35 · LAX 17:35 · JFK 20:35
    ♥ Do have faith in what you're doing.