Python 什么是';as';关键字在下面的代码中做什么?
我正在学习Python中的“异常”。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)
考虑下面的代码:
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'>