首页   注册   登录
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

小白求解惑: try/except/else/finally 语句中, else 的块为什么不能直接放到 try 下面?

  •  
  •   hjq98765 · 2017-07-31 19:29:35 +08:00 · 2074 次点击
    这是一个创建于 813 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如果把 else 块的代码放到 try 里面,那么:
    前面原 try 部分的代码报错的话,自然也不会执行后面原 else 部分代码的语句了;
    前面原 try 部分的代码没报错的话,后面原 else 部分代码的语句就会继续执行了

    所以 else 的意义何在?
    6 回复  |  直到 2017-08-01 10:28:58 +08:00
        1
    misaka19000   2017-07-31 20:21:17 +08:00 via Android
    看了半天没看懂什么意思,楼下解释是一下
        2
    blahgeek   2017-07-31 20:26:09 +08:00 via iPhone   ♥ 1
        3
    hustlibraco   2017-07-31 21:13:31 +08:00
    你把语句块全部放到 try 里面也没关系,但是有可能 else 从句中的代码也会产生异常,从而执行了你语气之外的 except 语句。
        4
    hjq98765   2017-07-31 21:18:09 +08:00
    @blahgeek 原来 else 里面是放一些不被 try-catch 保护的代码,学习到了,谢谢!
        5
    billion   2017-07-31 22:03:09 +08:00
    else 从来不会单独使用。else 只能配套使用构成下面的结构:
    while .. .else
    for ... else
    try ... else
    if ... else

    既然是配套使用,那么前面后面的缩进就要一样。
    如果你把 else 单独放在 try 的里面,那它和 try 的缩进层级就不一样了,所以自然就会报错。
        6
    hjq98765   2017-08-01 10:28:58 +08:00
    @billion 不是这个意思,我的意思是:

    原代码是这样子:

    ```
    try:
    do sth.1
    except:
    do sth.2
    else:
    do sth.3
    finally:
    do sth.4
    ```


    我要把代码变成:
    ```
    try:
    do sth.1
    do sth.3
    except:
    do sth.2
    finally:
    do sth.4
    ```

    我的问题是:这两者有什么区别?毕竟 do sth.1 和 do sth.3 要么都执行完毕、要么都不执行完毕

    收到的回答是:原代码只保护 do sth.1,而不保护 do sth.3,如果 do sth.3 报错则直接抛出错误
    修改后的代码则 do sth.1 和 do sth.3 都保护了,如果 do sth.3 报错则会执行 do sth.2
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3525 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 05:11 · PVG 13:11 · LAX 22:11 · JFK 01:11
    ♥ Do have faith in what you're doing.