在执行 raise 语句的同时创建异常类,无需事先定义异常类,方便快捷。
Project description
gqylpy-exception
在执行
raise
语句的同时创建异常类,无需事先定义异常类,方便快捷。例如,你想抛出一个名为NotUnderstandError
的异常, 导入import gqylpy_exception as ge
后直接执行raise ge.NotUnderstandError
即可。
gqylpy-exception
还提供了两个处理异常的装饰器:
TryExcept
: 截获被装饰的函数中引发的异常,并将异常信息输出到终端,不是抛出。Retry
: 同上,并会尝试重新执行,通过参数控制次数,在达到最大次数后抛出异常。
pip3 install gqylpy_exception
使用 gqylpy_exception
创建异常类
import gqylpy_exception as ge
raise ge.AnError(...)
gqylpy_exception
可以创建任意名称的异常类。AnError
不是 gqylpy_exception
中内置的,它是在你的代码执行到 ge.
时创建的,魔化方法 __getattr__
的特性。你还可以通过魔法方法 __getitem__
获得它:
e: ge.GqylpyError = ge['AnError'](...)
是的,使用 gqylpy_exception
创建的异常类都继承 GqylpyError
,GqylpyError
继承内置的 Exception
。
还有一种用法,导入即创建:
from gqylpy_exception import AnError
raise AnError(...)
另外,gqylpy_exception
不会重复创建异常类,创建过的异常类将存入 ge.__history__
字典,当你再次创建时从这个字典中取值。
使用装饰器 TryExcept
处理函数中引发的异常
from gqylpy_exception import TryExcept
@TryExcept(ValueError)
def func():
int('a')
默认的处理流程是将异常简要信息输出到终端。当然,也可以输出到文件或做其它处理,通过参数控制:
def TryExcept(
etype: Union[ExceptionTypes],
*,
silent_exc: Optional[bool] = None,
raw_exc: Optional[bool] = None,
logger: Optional[ExceptionLogger] = None,
ereturn: Optional[Any] = None,
ecallback: Optional[ExceptionCallback] = None,
eexit: Optional[bool] = None
):
...
参数 etype
要处理哪种异常,使用元祖传入多个。
参数 silent_exc
设为 True
将静默处理异常,没有任何输出。
参数 raw_exc
设为 True
将输出完整的异常信息,注意其优先级低于 silent_exc
。
参数 logger
接收一个日志记录器对象,TryExcept
希望使用日志记录器输出异常信息,它调用日志记录器的 error
方法。
缺省情况下使用 sys.stderr
输出异常信息。
参数 ereturn
若被装饰的函数中引发了异常,将返回此参数,默认为 None
。
它在某些可以设定非 None
默认返回值的函数中非常好用。
参数 ecallback
接收一个可调用对象,若被装饰的函数中引发了异常将调用它。
这个可调用对象还需接收多个参数:引发的异常对象,被装饰的函数对象,被装饰的函数的所有参数。
参数 eexit
设为 True
将在引发异常后抛出 SystemExit(4)
,如果有 ecallback
则会先执行 ecallback
。
使用装饰器 Retry
重试函数中引发的异常
from gqylpy_exception import Retry
@Retry(count=3, cycle=1)
def func():
int('a')
若被装饰的函数中引发了异常,会尝试重新执行被装饰的函数,默认重试 Exception
及其子类的所有异常。
像上面这样调用 Retry(count=3, cycle=1)
表示最大执行3次,每次间隔1秒。完整的参数如下:
def Retry(
etype: Optional[ExceptionTypes] = None,
*,
count: Optional[int] = inf,
cycle: Optional[Union[int, float]] = 0,
silent_exc: Optional[bool] = None,
raw_exc: Optional[bool] = None,
logger: Optional[ExceptionLogger] = None
):
...
Retry
继承 TryExcept
,你可以在 TryExcept
中找到参数说明,但注意 Retry
调用日志记录器的 warning
方法。
结合 TryExcept
使用,既能重试异常又能处理异常:
from gqylpy_exception import TryExcept, Retry
@TryExcept(ValueError)
@Retry(count=3, cycle=1)
def func():
int('a')
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for gqylpy_exception-2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86085ed3a61720d25f1a2443138ac0abe4fc6410efaa4a4976a9daafbde9ad15 |
|
MD5 | e896ec9b3655be2e30df19a6c5cc9277 |
|
BLAKE2b-256 | c4ccc42d51e526a70ca14a2fa9dd5ccc8c57e5ee2c4529867ae803003a72cd99 |