for/else、 while/else 和 try/else 大家用的多吗? - V2EX
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
WayToGo
V2EX    Python

for/else、 while/else 和 try/else 大家用的多吗?

  •  
  •   WayToGo 2019-01-31 17:36:42 +08:00 4174 次点击
    这是一个创建于 2445 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为与 if/else 的差别较大,会不会在实际工作中造成误解?
    第 1 条附言    2019-02-01 12:12:50 +08:00

    代码没有格式化,造成了误解,更新一下:

    for item in my_list: if item.flavor == 'banana': break else: raise ValueError('No banana flavor found!') 
    第 2 条附言    2019-02-01 12:20:24 +08:00
    1. for/else 这种写法比较简单。如果没有 else 语句,那么可能需要有个多一个 flag 变量来标识;
    2. 因为与 if/else 的意思差别大,而恰巧碰到对这个语法不熟的,会造成逻辑上的误解;

    所以,个人觉得可以用,但要加些注释。
    24 条回复    2019-02-11 15:38:56 +08:00
    ysc3839
        1
    ysc3839  
       2019-01-31 17:37:35 +08:00 via Android
    用的不多。我认为不会。
    zhoudaiyu
        2
    zhoudaiyu  
    PRO
       2019-01-31 18:17:00 +08:00 via iPhone
    偶尔用
    lniwn
        3
    lniwn  
       2019-01-31 18:17:01 +08:00
    《流畅的 Python 》中有谈到这个问题,个人觉得,这种用法对于一般人不会造成误解,对于专门研究语言的人,有可能会造成误解。这种用法已经是历史遗留问题,适应就好,不算奇巧淫技。
    tiedan
        4
    tiedan  
       2019-01-31 18:23:16 +08:00
    try/else 偶尔会用
    lihongjie0209
        5
    lihongjie0209  
       2019-01-31 18:27:58 +08:00
    没这种写法之前怎么写代码? 代码不只是给自己看的, 也是给别人看的
    WayToGo
        6
    WayToGo  
    OP
       2019-01-31 18:41:09 +08:00
    @ysc3839 @zhoudaiyu @tiedan 谢谢回复
    @lihongjie0209 嗯,同意
    @lniwn 我也是在《流畅的 Python 》里看到的,对于 for/else 一开始我的理解是错误的。
    书上的 for/else 例子
    for item in my_list:
    if item.flavor == 'banana':
    break
    else:
    raise ValueError('No banana flavor found!')
    junjieyuanxiling
        7
    junjieyuanxiling  
       2019-01-31 19:26:48 +08:00 via Android
    知道,但是一次也没用过。
    L2AKnG8GXx60bc6P
        8
    L2AKnG8GXx60bc6P  
       2019-01-31 19:54:38 +08:00
    经常用,超好用
    Tink
        9
    Tink  
    PRO
       2019-01-31 21:28:43 +08:00 via iPhone
    我居然不知道
    Hopetree
        10
    Hopetree  
       2019-02-01 00:30:28 +08:00
    我只知道 try/else/finally for/else 和 while/else 我怎么没见过,能给我例子我见识一下吗
    Hopetree
        11
    Hopetree  
       2019-02-01 00:31:42 +08:00
    @WayToGo 这个能算 for/else 吗?这命名就是 if/else,只不过放在了 for 循环里而已,层级都不同好吧
    thedrwu
        12
    thedrwu  
       2019-02-01 08:25:15 +08:00 via Android   1
    其实从语感上说,那个不该叫 else,而应该叫 otherwise。
    Qzier
        13
    Qzier  
       2019-02-01 08:42:13 +08:00 via iPhone
    基本很少有用
    lniwn
        14
    lniwn  
       2019-02-01 09:12:48 +08:00 via iPhone
    @WayToGo 这个例子中,进入 else 就表示循环正常结束,而不是通过 break 结束。
    marcong95
        15
    marcong95  
       2019-02-01 09:39:30 +08:00
    当年直接看官网 tutorial 学的 Python,感觉 for/else、while/else 挺好用的。但是工作中不用 Python,偶尔自己写一下的时候都很难想起来
    XIVN1987
        16
    XIVN1987  
       2019-02-01 09:40:11 +08:00 via Android
    感觉挺好的,,其他语言也该加上
    holyzhou
        17
    holyzhou  
       2019-02-01 09:49:20 +08:00
    在用,用的还挺多的 记得<<编写高质量 python 代码的 59 个有效方法>>里面还有一节说,不建议用,我个人觉得还行
    piqizhu
        18
    piqizhu  
       2019-02-01 09:51:50 +08:00
    很少用
    guanhui07
        19
    guanhui07  
       2019-02-01 10:01:05 +08:00
    很少用
    princelai
        20
    princelai  
       2019-02-01 10:02:38 +08:00
    自从知道这个语法了解了以后,while/else 和 try/else 用的很多,非常好用,for/else 用的不多,不过看流畅的 python 里说好像的确不建议多用
    metamask
        21
    metamask  
       2019-02-01 10:09:30 +08:00
    @Hopetree

    这两种跟 try 也是一样,
    循环结束后执行,

    可配合 break
    okwork
        22
    okwork  
       2019-02-01 12:33:26 +08:00 via Android
    for else 用的少,其他的都是高频用法吧
    TuringGunner
        23
    TuringGunner  
       2019-02-01 12:42:53 +08:00 via Android
    用 try else 比较多,其他两个基本不用
    butterfly1211
        24
    butterfly1211  
       2019-02-11 15:38:56 +08:00
    用的非常多
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2620 人在线   最高记录 6679       Select anguage
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 06:20 PVG 14:20 LAX 23:20 JFK 02:20
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86