python-困惑如何;作为「;关键字在except语句中工作
到目前为止,我一直试图大体上理解python中的“as”关键字是如何工作的,并学习了3个案例 案例1:python-困惑如何;作为「;关键字在except语句中工作,python,oop,Python,Oop,到目前为止,我一直试图大体上理解python中的“as”关键字是如何工作的,并学习了3个案例 案例1:将foo导入为条形图 案例2:以foo()为条: 案例3:例外情况除外,如e: 我了解前两个案例的工作原理,案例1将包名称分配给不同的名称,案例2使用类中的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 然而,
将foo导入为条形图
案例2:以foo()为条:
案例3:例外情况除外,如e:
我了解前两个案例的工作原理,案例1将包名称分配给不同的名称,案例2使用类中的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
然而,案例3似乎有所不同,我查看了一些文件,这些文件似乎没有帮助,在任何地方都找不到太多的解释。在本例中,Exception.args
与e.args
的工作方式不同,我一直在试图弄清楚这在幕后是如何工作的,即调用任何方法,或者为什么它的行为不同除了A作为b:
之外,短语声明在上述try
子句中,将捕获类A
(或其子类)的所有异常。实际捕获的异常将在变量b
中可见
try:
raise KeyError('example')
except LookupError as problem:
print("I caught %r as problem." % problem)
这会打印出来
I caught KeyError('example',) as problem.
试着运行这个,这会让你明白
try:
zero = 0
b = 1.0 / zero
except ArithmeticError as e:
print( "Runtime error: ", e)
算术错误
是要捕获的Python异常类。e是该类的一个实例,在本例中,使用except语句中的子类ZeroDivisionError
将名称与正在传递的异常关联,并使用as
关键字
在Python3.x中,将用作是将异常分配给本地的唯一方法。但这不是必须的
在Python2.6+中,我们有两个选项,
和as
。由于,
在multicatch的情况下是不明确的,这允许您在一个块中捕获多个异常<代码>as
是首选选项
在Python2.5及更早版本中,我们使用,
进行关联,因为不支持as
调用e.args
意味着您可以访问异常对象的属性。但它不会捕获BaseException
SystemExit
KeyboardInterrupt
和generatoreexit
try:
i = 1/0
print(i)
except Exception as e:
print (e.args)
这将打印:
('division by zero')
如果我们发现BaseException
错误,情况会更糟
try:
raise BaseException()
except Exception as e:
print (e.args)
输出将如下所示
runfile('W:/Summerizer/except.py', wdir='W:/Summerizer')
Traceback (most recent call last):
File "<ipython-input-3-11e8f07e28c7>", line 1, in <module>
runfile('W:/Summerizer/except.py', wdir='W:/Summerizer')
File "C:\Users\adodhiwala\AppData\Local\conda\conda\envs\py35\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 668, in runfile
execfile(filename, namespace)
File "C:\Users\adodhiwala\AppData\Local\conda\conda\envs\py35\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "W:/Summerizer/except.py", line 10, in <module>
raise BaseException()
BaseException
runfile('W:/Summerizer/except.py',wdir='W:/Summerizer')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
运行文件('W:/Summerizer/except.py',wdir='W:/Summerizer')
文件“C:\Users\adodhiwala\AppData\Local\conda\conda\envs\py35\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第668行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\adodhiwala\AppData\Local\conda\conda\envs\py35\lib\site packages\spyder\u kernels\customize\spyderrcustomize.py”,第108行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“W:/Summerizer/except.py”,第10行,在
raisebaseexception()
基本例外
这里的as
用于访问更多函数(args、message等),这样您就可以更有效地理解错误 Exception
是异常类,e
是异常对象。as e
基本上将名称e
分配给已捕获的异常实例,以便您可以在except
块中引用它(例如,用于日志记录)。请看,我明白了,这更有意义,因此,本例中的b只捕获了该类的一个对象,如果我理解的话,在本例中,您不能在未初始化的情况下自行打印LookupErrorcorrectly@NightShade对<在我的示例中,code>LookupError
是一个类对象,而problem
是一个实例对象。第一个是类型,第二个是此类型的值。(有点。)