V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hackpro
V2EX  ›  问与答

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

  •  
  •   hackpro · 2018-04-27 15:25:02 +08:00 · 1848 次点击
    这是一个创建于 2407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的代码类似于:

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

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

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

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

    第 1 条附言  ·  2018-04-27 17:32:35 +08:00

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

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

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

    12 条回复    2018-04-28 19:47:00 +08:00
    alvin666
        1
    alvin666  
       2018-04-27 16:22:04 +08:00 via Android
    把代码全放上来看看,是哪里出错了?
    hackpro
        2
    hackpro  
    OP
       2018-04-27 16:36:57 +08:00
    @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  
       2018-04-27 16:52:41 +08:00
    Only one note: https://docs.python.org/3/library/exceptions.html#exception-hierarchy

    May not be helpful for your problem.
    ipwx
        4
    ipwx  
       2018-04-27 16:57:22 +08:00
    顺便 Python 里面一个 tab 等于 8 个空格。如果你空格 和 tab 混用,小心被坑。
    zhouxuchen
        5
    zhouxuchen  
       2018-04-27 16:59:06 +08:00
    @ipwx #4 眼尖的,我看了下还真是,LZ 这个编码习惯不好
    hackpro
        6
    hackpro  
    OP
       2018-04-27 17:01:16 +08:00
    @ipwx #3 感谢回复
    1. 意思是如何我 capture BaseException 能捕捉所有类型 Exception, 只抓 Exception 会 miss 掉一部分?
    2. 通常我是只用 tab 不过 Python 缩进的话 4 个空格就够了吧……
    hackpro
        7
    hackpro  
    OP
       2018-04-27 17:02:09 +08:00
    @zhouxuchen #5 这个代码在 V2 里我是手动敲的 因为缩进不太好弄
    wisej
        8
    wisej  
       2018-04-27 17:10:16 +08:00 via Android
    @hackpro 支持 markdown 的代码格式的,在 ide 里写好复制一下就好了
    ipwx
        9
    ipwx  
       2018-04-27 17:56:12 +08:00
    @hackpro 一般大家都用 4 个空格缩进。Google 用 2 个。空格 tab 混用的风险在于,大部分编辑器会显示成 4 个空格,但是 Python 解释器会认作 8 个空格。而 Python 解释器的语法是根据 8 个空格去理解程序的。
    julyclyde
        10
    julyclyde  
       2018-04-28 08:06:45 +08:00
    @ipwx 最后一句“ Python 解释器的语法是根据 8 个空格去理解程序的”显然是不对的。如果按 8 个来理解,那 2 个 4 个的都是语法错误了
    zhanglintc
        11
    zhanglintc  
       2018-04-28 13:29:01 +08:00
    讲道理, 如果写 continue 不会出问题的话, pass 也不会出问题啊.
    感觉还是没找到根源来着.
    ipwx
        12
    ipwx  
       2018-04-28 19:47:00 +08:00 via iPhone
    @julyclyde 我的意思是,Python 碰到 tab 会理解为这里有 8 个空格
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4533 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:07 · PVG 18:07 · LAX 02:07 · JFK 05:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.