In python why ever use except:
在python中,
据我所知,
除此之外,你为什么只想要一个
除了pok_mon异常处理*是一个坏主意外,还有几个不同之处。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | >>> class Foo(): pass ... >>> try: ... raise Foo() ... except Exception: ... print 'Caught' ... Traceback (most recent call last): File"<stdin>", line 2, in <module> __main__.Foo: <__main__.Foo instance at 0x10ef566c8> >>> try: ... raise Foo() ... except BaseException: ... print 'Caught' ... Traceback (most recent call last): File"<stdin>", line 2, in <module> __main__.Foo: <__main__.Foo instance at 0x10ef56680> >>> try: ... raise Foo() ... except: ... print 'Caught' ... Caught |
因为旧样式对象不是从
其次,有三个例外,它们来自于
*pok_mon异常处理,因为你要抓住他们。
这三者的区别在于:
一般来说,我建议使用2。(理想情况下作为回退,在捕捉到特定的/"预期的"错误之后),因为这允许那些系统退出异常渗透到顶层。如你所说,
这里有一篇关于"例外的邪恶"的有用文章。
如果你真的不在乎失败的原因或信息是什么,你可以使用一个裸的
不完全是这样。
如果您查看了关于内置异常(特别是这个位)的python文档,您将看到从何处继承的异常。如果使用raw except:它将捕获抛出的每个异常,甚至包括您几乎肯定不想捕获的keyboardinterrupt;如果使用except baseexception as exp:捕获baseexception,则会发生同样的情况,因为所有异常都继承自它。
如果要捕获所有程序运行时异常,则应将exception用作exp:因为它不会捕获要结束程序的异常类型(如keyboardinterrupt)。
现在,人们会告诉你,以这种方式捕获所有异常是一个坏主意,一般来说,它们是正确的;但是,例如,如果您有一个程序处理大量数据,那么在发生异常时,您可能会理所当然地希望它不退出。只要您正确处理异常(即,记录它并确保用户看到发生了异常),但决不只是通过;如果您的程序产生了您不知道的错误,它确实会做一些奇怪的事情!
Aside from that why would you ever want just an
except: clause?
号
简短的回答:你不想这样。
更长的回答:使用一个裸的