Python 什么是';as';关键字在下面的代码中做什么?

Python 什么是';as';关键字在下面的代码中做什么?,python,python-3.x,Python,Python 3.x,我正在学习Python中的“异常”。 考虑下面的代码: def fancy_divide(): try: print(5/0) except Exception: print(Exception) 如果我运行上述代码,即 花式除法 它打印出。 但如果我修改代码: def fancy_divide(): try: print(5/0) except Exception as ex: print(ex)

我正在学习Python中的“异常”。
考虑下面的代码:

def fancy_divide():
    try:
        print(5/0)
    except Exception:
        print(Exception)
如果我运行上述代码,即

花式除法

它打印出
。 但如果我修改代码:

def fancy_divide():
    try:
        print(5/0)
    except Exception as ex:
        print(ex)
调用函数
fancy_divide()

为什么会有这种差异?

我认为'as'关键字只是为了重命名对象。

它说,对于
as
之后的作用域,将有一个名为
ex
的变量,该变量是从
异常创建的

在您的例子中,不同之处在于,在示例1中,您打印出类异常,在示例2中,您打印的是类型为异常的对象

>>> print(int)
<class 'int'>
>>> print(int(1))
1
>>> 
在python中,它有以下示例:

>>> try:
...     raise NameError('HiThere')
... except NameError:
...     print('An exception flew by!')
...     raise
...
An exception flew by!
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
NameError: HiThere

在第一个
fancy_divide
函数的最后一行,您打印了
Exeption
类本身,而不是
Exception
类的实例。在更新代码的第三行,您使用
作为
关键字,试图捕获
异常
类或其子类的实例,并在出现错误时将其分配给变量
ex
。注意:实例与实际类不同(我希望您已经知道这一点)

当您将
ex
的内容与
Exception
进行比较时,可以看到这一点:

def fancy_divide_return():
    try:
        print(5/0)
    except Exception as ex:
        return Exception, ex



>>> the_class, the_instance = fancy_divide_return()
>>> the_class
<class 'Exception'>
>>> the_instance
ZeroDivisionError('division by zero',)
>>> type(the_class)
<class 'type'>
>>> type(the_instance)
<class 'ZeroDivisionError'>
def fancy_divide_return():
尝试:
打印(5/0)
例外情况除外,例如:
返回异常,例如
>>>类,实例=fancy\u divide\u return()
>>>班
>>>这个例子
ZeroDivisionError('除以零',)
>>>类型(_类)
>>>类型(_实例)

Exception
是一个类,
ex
是一个对象
print(Exception)
将在任何地方打印
(只要不使用此名称声明变量),但
ex
将只存在于其scope@Aran-费伊,你是怎么写的?@idpd15我用“回帖”把它包起来了@RafaelC:我觉得你应该写一个这样的答案。
>>> try:
...     raise NameError('HiThere')
... except NameError as e:
...     print(e)
...     print('An exception flew by!')
...     raise
...
def fancy_divide_return():
    try:
        print(5/0)
    except Exception as ex:
        return Exception, ex



>>> the_class, the_instance = fancy_divide_return()
>>> the_class
<class 'Exception'>
>>> the_instance
ZeroDivisionError('division by zero',)
>>> type(the_class)
<class 'type'>
>>> type(the_instance)
<class 'ZeroDivisionError'>