Assert
assert <test>, <data> # The <data> part is optional
相当于
if __debug__:
if not <test>:
raise AssertionError(<data>)
Exception
Python 支持异常处理:try...except...[else...不出现异常时执行的][finally...永远执行的]。抛出的异常必须是异常类的实例
raise Exception()
用户定义的异常类必须继承 Exception 类或其子类。except SomeError 语句可以拦截 SomeError 实例,以及 SomeError 子类的实例。
最简单的异常类定义:
class FuncError(Exception): pass
使用时
e = FuncError(arg1, arg2, ...)
raise e
或直接
raise FuncError(arg1, arg2, ...)
它可以接受任意参数,这些参数保存在 e.args,用于提示错误
except FuncError as e:
print e.args
sys.exc_info
exc_info() -> (type, value, traceback)
Return information about the most recent exception caught by an except
clause in the current stack frame or in an older stack frame.
try:
<statements> # Run this main action first
except <name1>:
<statements> # Run if name1 is raised during try block
except (name2, name3):
<statements> # Run if any of these exceptions occur
except <name4> as <data>:
<statements> # Run if name4 is raised, and get instance raised
except:
<statements> # Run for all (other) exceptions raised
else:
<statements> # Run if no exception was raised during try block
finally:
<statements> # Always perform this block.
except: Catch all (or all other) exception types.
except name: Catch a specific exception only.
except name as value: Catch the listed exception and its instance.
except (name1, name2): Catch any of the listed exceptions.
except (name1, name2) as value: Catch any listed exception and its instance.
else: Run if no exceptions are raised.
finally: Always perform this block.
raise <instance> # Raise instance of class
raise <class> # Make and raise instance of class
raise # Reraise the most recent exception (Propagating Exceptions,把当前的exception向上传播)
所以一个通常的try except 样子如下
try:
action()
except NameError:
... # Handle NameError
except IndexError:
... # Handle IndexError
except:
... # Handle all other exceptions
else:
... # Handle the no-exception case
class ArgError(Exception): pass
class FirstArgError(ArgError): pass
def f(x,y):
if x < 0:
raise FirstArgError("x=%f, Negative number is not accept"%x)
if y < 0:
raise ArgError("Argument error")
try:
f(-1,-1)
except FirstArgError as e:
print e.args
except ArgError as e:
print e.args例子:导入库的处理
try:
from EasyDialogs import AskPassword
except ImportError:
getpass = default_getpass
else:
getpass = AskPassword
0 comments:
Post a Comment