Subpy是一個庫,用於定義Python語言的子集,並查詢AST的語言級屬性,這些屬性被指定為一組功能。
許多項目旨在與Python的特定子集合作,這些項目適合靜態分析和類型推理,Subpy只是一個靜態分析庫,用於檢查子集的子集,目的是為最終用戶提供更有信息的錯誤報告。
checker的輸入可以是字符串的模塊,函數代碼或源代碼。它返回以feature枚舉代碼鍵入的列表的詞典以及帶有檢測到功能的行號的值。
> >> from subpy import checker
> >> import io
> >> print checker ( io )
{ 3 : [ 98 ],
5 : [ 78 , 81 , 84 , 87 ],
9 : [ 78 , 81 , 84 , 87 ],
10 : [ 81 , 84 , 87 ],
32 : [ 92 , 96 ],
34 : [ 79 ]}將功能代碼與字典中的鍵匹配,我們看到了這一信息告訴我們,在標準庫中的io模塊中:
使用功能級檢查器的示例:
from subpy import checker
from subpy . features import ListComp
def example1 ():
return [ x ** 2 for x in range ( 25 )]
def example2 ():
return 'hello'
features = checker ( example1 )
if ListComp in features :
print 'You used a list comprehension on lines %r' % ( features [ ListComp ])
features = checker ( example2 )
if ListComp not in features :
print 'You did not use any list comprehensions!' 例如,如果我們要排除列表綜合的使用和設置綜合的使用,我們可以定義一個排除這些功能的Python的子集。
MyPythonSubset = FullPython - { ListComp , SetComp }當在給定源中檢測到不支持的功能時, validator命令可用於升級。例如,我們將支持Python功能集,不包括列表綜合和設置綜合。
from subpy import validator , FullPython , FeatureNotSupported
from subpy . features import ListComp , SetComp
def example ():
return [ x ** 2 for x in range ( 25 )]
my_features = FullPython - { ListComp , SetComp }
validator ( example , features = my_features ) File "<stdin>" , line 2
return [ x ** 2 for x in range ( 25 )]
^
subpy . validate . FeatureNotSupported : ListCompSubpy當前能夠解析整個標準庫,可用於查詢一些有趣的瑣事事實。
from subpy import detect
from subpy . stdlib import libraries
from subpy . features import Metaclasses , MInheritance , Exec
import importlib
print ( 'Libraries with Multiple Inheritance and Metaclasses:' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Metaclasses in features and MInheritance in features :
print ( lib ) Libraries with Multiple Inheritance and Metaclasses:
io
或查詢潛在的不安全代碼執行:
print ( 'Libraries with Exec' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Exec in features :
print ( lib ) Libraries with Exec
ihooks
site
cgi
rexec
Bastion
imputil
trace
timeit
cProfile
doctest
code
bdb
runpy
profile
collections
當前支持的功能是枚舉,其值下面給出:
進行測試運行:
$ python -m unittest discover subpy/tests核心邏輯是在features.py中獨立的validate.py除標準庫外,沒有其他依賴關係。
版權(C)2013,Continuum Analytics,Inc。保留所有權利。
如果滿足以下條件:
源代碼的再分配必須保留上述版權通知,此條件列表和以下免責聲明。
二進制形式的重新分配必須複製上述版權通知,此條件列表以及文檔和/或分發提供的其他材料中的以下免責聲明。該軟件由版權所有者和貢獻者“按原樣”提供,任何明示或暗示的保證,包括但不限於對適銷性和特定目的適合性的隱含保證。在任何情況下,版權持有人或貢獻者均不得對任何直接,間接,偶然,特殊,特殊,示例性或結果損害均承擔任何責任(包括但不限於替代商品或服務的採購,損失,數據或利潤損失,數據或利潤;還是造成的,無論是在合同中造成的,或者在任何責任中造成的責任,或者是否有任何責任,或者在任何責任中,是否有任何責任,或者是否有任何責任,或者是否有責任,是否有責任,是否有責任。告知可能造成這種損害的可能性。