feat: 新增技能扩展N5一章相关示例源码
This commit is contained in:
48
code/newsletter/N5/exceptions.py
Normal file
48
code/newsletter/N5/exceptions.py
Normal file
@@ -0,0 +1,48 @@
|
||||
class InvalidTypeError(Exception):
|
||||
def __init__(self, value, code, detail, *args) -> None:
|
||||
super().__init__(value, *args)
|
||||
self.code = code
|
||||
self.detail = detail
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return self.detail
|
||||
|
||||
|
||||
def check(v, klass):
|
||||
klass_names = [k.__name__ for k in klass]
|
||||
|
||||
if not isinstance(v, tuple(klass)):
|
||||
raise InvalidTypeError(
|
||||
f"{v.__class__.__name__} class is unknown, use {klass_names}.",
|
||||
code=500,
|
||||
detail={"value": v, "type": v.__class__.__name__},
|
||||
)
|
||||
return v
|
||||
|
||||
|
||||
def add(a, b):
|
||||
klass = [int, float]
|
||||
try:
|
||||
a = check(a, klass)
|
||||
b = check(b, klass)
|
||||
except InvalidTypeError as e:
|
||||
error = {
|
||||
"name": InvalidTypeError.__name__,
|
||||
"code": e.code,
|
||||
"detail": e.detail,
|
||||
}
|
||||
raise TypeError(error) from e
|
||||
|
||||
return a + b
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
try:
|
||||
print(add(1, "2"))
|
||||
except TypeError as e:
|
||||
print(e.args)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user