On Sun, 29 Aug 2021 at 00:04, Stefan Ram <r...@zedat.fu-berlin.de> wrote:
> Stestagg <stest...@gmail.com> writes: > >If you're doing this analysis, I'd be pretty interested in how many of > >those while loops where 'while True:' > > Here, about 40 %. Thanks! That's an interesting stat. I might have to look more into how while loops are actually used in other people's code. > > Below is a new version that is supposed to also count "if True:" > and "if 1:" and also removes a bug with the exception handling > (missing "import sys" and missing "UnicodeDecodeError"). I'm not > experienced in using the AST module, so there might still be bugs > in the program! > > import ast > import pathlib > import sys > rootname=r'''PATH TO SOURCE DIR (WITHOUT A BACKQUOTE AT THE END)''' > rootpath=pathlib.Path(rootname) > rootiterable=rootpath.glob('**/*.py') > WhileCount = 0 > TrueCount = 0 > ForCount = 0 > for filepath in rootiterable: > try: > with filepath.open(encoding="utf-8") as file: > source=file.read() > parse=ast.parse(source, filename=str(file)) > for entry in ast.walk(parse): > if isinstance(entry, ast.While): > WhileCount+=1 > if ( isinstance( entry.test, ast.Constant ) and > hasattr( entry.test, "value") and > ( isinstance( entry.test.value, bool ) > and entry.test.value == True or > isinstance( entry.test.value, int ) > and entry.test.value != 0 )): > TrueCount+=1 > print( f"{ForCount=}, {WhileCount=}, {TrueCount=}" ) > elif isinstance(entry, ast.For): > ForCount+=1 > print( f"{ForCount=}, {WhileCount=}" ) > except ( SyntaxError, UnicodeDecodeError )as inst: > print( f"skipping {filepath}." ) > print( f"{sys.exc_info()[ 0 ] =}" ) > print( f"{type( inst ) =}" ) > print( f"{inst.args =}" ) > print( f"{inst =}\n" ) > print( f"{ForCount=}, {WhileCount=}, {TrueCount=}" ) > > > -- > https://mail.python.org/mailman/listinfo/python-list > -- https://mail.python.org/mailman/listinfo/python-list