请教如何处理 Python 中的异常以保证脚本能够长时间运行 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
hackpro

请教如何处理 Python 中的异常以保证脚本能够长时间运行

  •  
  •   hackpro Apr 27, 2018 2188 views
    This topic created in 2921 days ago, the information mentioned may be changed or developed.

    现在的代码类似于:

    def some_func(): ... if __name__ == "__main__": while True: try: some_func() except Exception as e: pass 

    但是 PyCharm 中运行还是会抛异常导致程序 Crash

    请教小伙伴这段代码有什么问题吗

    另外应该如何更好地保证代码长时间运行不 Crash 的问题 谢谢

    Supplement 1    Apr 27, 2018

    感谢各位 将 pass 换成 continue 跑了段时间似乎没有问题了

    在Python里 pass 相当于一个placeholder,实际上是NOP

    但是对于已经抓到的Exception 为啥还是Crash呢,continue 似乎不会?

    12 replies    2018-04-28 19:47:00 +08:00
    alvin666
        1
    alvin666  
       Apr 27, 2018 via Android
    把代码全放上来看看,是哪里出错了?
    hackpro
        2
    hackpro  
    OP
       Apr 27, 2018
    @alvin666 #1 这个 some_func() 里面就是 get post 数据
    本意是如果出现问题 就忽略掉

    但是现在报了 HTTPSConnectionPool Exception 并且 Crash 了
    Max tries exceeded with url: (Caused by SSLError(SSLError("bad handshake syscallerror(-1, "Unexpected EOF")")))
    ipwx
        3
    ipwx  
       Apr 27, 2018
    Only one note: https://docs.python.org/3/library/exceptions.html#exception-hierarchy

    May not be helpful for your problem.
    ipwx
        4
    ipwx  
       Apr 27, 2018
    顺便 Python 里面一个 tab 等于 8 个空格。如果你空格 和 tab 混用,小心被坑。
    zhouxuchen
        5
    zhouxuchen  
       Apr 27, 2018
    @ipwx #4 眼尖的,我看了下还真是,LZ 这个编码习惯不好
    hackpro
        6
    hackpro  
    OP
       Apr 27, 2018
    @ipwx #3 感谢回复
    1. 意思是如何我 capture BaseException 能捕捉所有类型 Exception, 只抓 Exception 会 miss 掉一部分?
    2. 通常我是只用 tab 不过 Python 缩进的话 4 个空格就够了吧……
    hackpro
        7
    hackpro  
    OP
       Apr 27, 2018
    @zhouxuchen #5 这个代码在 V2 里我是手动敲的 因为缩进不太好弄
    wisej
        8
    wisej  
       Apr 27, 2018 via Android
    @hackpro 支持 markdown 的代码格式的,在 ide 里写好复制一下就好了
    ipwx
        9
    ipwx  
       Apr 27, 2018
    @hackpro 一般大家都用 4 个空格缩进。Google 用 2 个。空格 tab 混用的风险在于,大部分编辑器会显示成 4 个空格,但是 Python 解释器会认作 8 个空格。而 Python 解释器的语法是根据 8 个空格去理解程序的。
    julyclyde
        10
    julyclyde  
       Apr 28, 2018
    @ipwx 最后一句“ Python 解释器的语法是根据 8 个空格去理解程序的”显然是不对的。如果按 8 个来理解,那 2 个 4 个的都是语法错误了
    zhanglintc
        11
    zhanglintc  
       Apr 28, 2018
    讲道理, 如果写 continue 不会出问题的话, pass 也不会出问题啊.
    感觉还是没找到根源来着.
    ipwx
        12
    ipwx  
       Apr 28, 2018 via iPhone
    @julyclyde 我的意思是,Python 碰到 tab 会理解为这里有 8 个空格
    About     Help     Advertise     Blog     API     FAQ     Solana     3605 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 04:44 PVG 12:44 LAX 21:44 JFK 00:44
    Do have faith in what you're doing.
    ubao msn 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