Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 例外:和例外之间的差异为e:_Python_Python 3.x - Fatal编程技术网

Python 例外:和例外之间的差异为e:

Python 例外:和例外之间的差异为e:,python,python-3.x,Python,Python 3.x,以下两段代码都做了相同的事情。它们捕获每个异常并执行块中的代码,除了:块 片段1- try: #some code that may throw an exception except: #exception handling code 片段2- try: #some code that may throw an exception except Exception as e: #exception handling code 这两种构造的具体区别是什么?在第

以下两段代码都做了相同的事情。它们捕获每个异常并执行
块中的代码,除了:

片段1-

try:
    #some code that may throw an exception
except:
    #exception handling code
片段2-

try:
    #some code that may throw an exception
except Exception as e:
    #exception handling code

这两种构造的具体区别是什么?

在第二种情况下,您可以访问异常对象的属性:

>>> def catch():
...     try:
...         asd()
...     except Exception as e:
...         print e.message, e.args
... 
>>> catch()
global name 'asd' is not defined ("global name 'asd' is not defined",)
但它不会捕获
BaseException
或系统退出异常
SystemExit
键盘中断
generatoreexit

>>> def catch():
...     try:
...         raise BaseException()
...     except Exception as e:
...         print e.message, e.args
... 
>>> catch()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in catch
BaseException
有关更多信息,请参阅文档部分和教程部分

except:
接受所有异常,而

except Exception as e:
只接受您要捕获的异常

下面是一个你不想抓住的例子:

>>> try:
...     input()
... except:
...     pass
... 
>>> try:
...     input()
... except Exception as e:
...     pass
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyboardInterrupt
如果你想抓住其中任何一个,最好这样做

except BaseException:
指出你知道自己在做什么



所有的异常都源于
BaseException
,而那些你打算每天捕捉的异常(那些将为程序员抛出的异常)也继承自
异常

一些异常有不同之处,例如键盘中断

阅读:

一个简单的except:子句将捕获SystemExit和KeyboardInterrupt 异常,使使用Control-C中断程序变得更加困难, 可以掩盖其他问题。如果要捕获所有异常 表示信号程序错误,使用除外异常:(bare EXPECT是 等效于,但BaseException除外:)


使用第二种形式会在
块范围中提供一个变量(在您的示例中,命名基于
as
子句
e
),该变量绑定了异常对象,因此您可以在异常中使用infomration(类型、消息、堆栈跟踪等)在一个更专门定制的庄园中处理异常。

另一种方式来看待这一点。查看异常的详细信息:

In [49]: try: 
    ...:     open('file.DNE.txt') 
    ...: except Exception as  e: 
    ...:     print(dir(e)) 
    ...:                                                                                                                                    
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', 'args', 'characters_written', 'errno', 'filename', 'filename2', 'strerror', 'with_traceback']
使用“as e”语法可以访问很多“东西”


此代码仅用于显示此实例的详细信息。

除外(例外)
从不捕捉
键盘中断
错误<代码>因为e
和它没有任何关系。我从来没有说过它有关系。我从未将
称为e
,因为我认为它的作用是显而易见的。是否有人会捕获BaseException并知道他们在做什么?@Davos是的,你可能更喜欢在做瞬态日志记录时使用它,或者,如果您正在向用户提供一个控制台,您不希望出现异常,如
SystemExit
KeyboardInterrupt
。这不是常见的情况,但确实发生了。好吧,这里没有魔法
Exception
是从
BaseException
派生出来的,这就是为什么
Exception
不能捕获
BaseException
。如果您编写除BaseException之外的
,它也会被捕获。Bare
Exception
只捕获所有内容。我应该指出,一个Bare
Exception
必须是一系列
Exception
块中的最后一个,而如果将
Exception
放在其他
Exception
块之前,则不会出现错误:它们将被默默忽略(如果它们处理
Exception
子类)。需要注意的事情。@MatthewPhipps这就是重点,不是吗?就像case语句或if else块一样,执行跳转到匹配的第一个条件…@Basic只是指出了裸
Exception
Exception
之间的另一个区别。“有什么值得注意的吗"现在看起来有点奇怪,但当时我希望Python选择最具体的
,除了
块,而不管它在哪里,并且有点失望地发现不是这样。还值得注意的是,只有当您不关心异常是什么或希望以有意义的方式处理它时,才应该使用第二种形式@用户2725093这不是同一个问题。您链接到的问题询问
异常除外,e:
异常除外为e:
之间的区别。此问题询问
异常除外:
异常除外为e:
之间的区别。
except BaseException:
In [49]: try: 
    ...:     open('file.DNE.txt') 
    ...: except Exception as  e: 
    ...:     print(dir(e)) 
    ...:                                                                                                                                    
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', 'args', 'characters_written', 'errno', 'filename', 'filename2', 'strerror', 'with_traceback']