该模块提供动态类型检查机制。

typechecker的Python项目详细描述


该模块提供动态类型检查机制。

正常类型检查:

>>> from typechecker import typeinfo, list_, tuple_, has_attrs
>>> @typeinfo(int, x=int, y=int)
... def add(x, y):
...     return x + y
>>> add(10, 20)
30
>>> add('aa', 'bb')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "typechecker/typeinfo.py", line 113, in call
    _check_arg(f, assigned, types)
  File "typechecker/typeinfo.py", line 84, in _check_arg
    f.__name__))
TypeError: In function add, argument "y" required "int". "str" found.

元组类型检查:

>>> @typeinfo(int, val=tuple_(int, str))
... def test(val):
...     return len(val)
...
>>> test((19, 'aaa'))
2
>>> test('aaa')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "typechecker/typeinfo.py", line 113, in call
    _check_arg(f, assigned, types)
  File "typechecker/typeinfo.py", line 84, in _check_arg
    f.__name__))
TypeError: In function test, argument "val" required "tuple[int, str]". "str" found.

列表类型检查:

>>> @typeinfo(int, val=list_(int))
... def test(val):
...     return 10
...
>>> test([1,2,3])
10
>>> test([1,2,'aaa'])
Traceback (most recent call last):
  File "typechecker/typeinfo.py", line 113, in call
    _check_arg(f, assigned, types)
  File "typechecker/typeinfo.py", line 84, in _check_arg
    f.__name__))
TypeError: In function test, argument "val" required "list[int]". "list" found.

复杂类型检查:

>>> @typeinfo(int, val=tuple_(list_(int)))
... def test(val):
...     return 10
...
>>> test(([1],))
10
>>> test((['aa'],))
Traceback (most recent call last):
  File "/usr/local/python2.7/lib/python2.7/doctest.py", line 1254, in __run
    compileflags, 1) in test.globs
  File "<doctest typechecker[12]>", line 1, in <module>
    test((['aa'],))
  File "typechecker/typeinfo.py", line 113, in call
    _check_arg(f, assigned, types)
  File "typechecker/typeinfo.py", line 84, in _check_arg
    f.__name__))
TypeError: In function test, argument "val" required "tuple[list[int]]". "tuple" found.

结构子类型:

>>> @typeinfo(int, f=Callable)
... def test(f):
...     return 10
...
>>> test(map)
10
>>> test(1)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "typechecker/typeinfo.py", line 113, in call
    _check_arg(f, assigned, types)
  File "typechecker/typeinfo.py", line 84, in _check_arg
    f.__name__))
TypeError: In function test, argument "f" required "hasattr[__call__]". "int" found.

然后检查:

>>> @typeinfo(int, f=and_(Callable, ContextManager))
... def test(f):
...     return 10
...
>>> test(file)
10
>>> test(map)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "typechecker/typeinfo.py", line 113, in call
    _check_arg(f, assigned, types)
  File "typechecker/typeinfo.py", line 84, in _check_arg
    f.__name__))
TypeError: In function test, argument "f" required "And[hasattr[__call__], hasattr[__enter__, __exit__]]". "builtin_function_or_method" found.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在使用apache poi获取空行中的getLastCellNum()方法时获取nullPointerException   向方法发送多个参数并返回值,Java   转换SVG时Batik出现java错误:<use>元素的属性“xlink:href”是必需的   使用迭代器时的java ConcurrentModificationException<Node>   java Maven正在向本地存储库安装一个不在依赖关系树或我的POM中的依赖关系   java如何检测设备是否有传感器使用Kotlin中的指南针?   如何选择在seleniumjava中运行时生成div[i]的复选框?   java使用Spring和html表单获取对象   传递特定格式字符串的java构造函数   解组错误时找不到java类。带字节数组的包裹,字节[]   在Java中,如何从超类方法中获取子类值?   java hibernate如何确保用数据库中的最新数据更新二级缓存   多线程在java中是Mac#doFinal()线程安全的吗?   java apache velocity:附带编译的模板   java禁用安卓 webview中的弹出窗口和警报框   为什么ANT不为构建使用Eclipse工作区默认JRE   java MySQL:ON DUPLICATE KEY语句在JDBC中失败   java Spring+AngularJs+Tomcat 9.0 403发送PUT请求时出错   Java服务器在需要时侦听socket