[Python-ideas] "try with" syntactic sugar

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri Feb 27 12:14:28 CET 2009


En Fri, 27 Feb 2009 00:00:59 -0200, Daniel Stutzbach
<daniel-k6jgQluAQ1RLuhoIm4CQ5lNBC6VQM+k9 at public.gmane.org> escribió:
> On Thu, Feb 26, 2009 at 7:28 PM, Bruce Frederiksen  
> <dangyogi-Re5JQEeQqe8AvxtiuMwx3w at public.gmane.org>wrote:
>
>> How about this?
> I tried it, but it matches quite a few comments and strings.  Try

I think a r.e. cannot handle this query well enough.
This script uses the tokenize module and should be immune to those false
positives (but it's much slower)

<code>
import sys, os
   from tokenize import generate_tokens
   from token import NAME

def process(path):
     nfiles = nwith = ntrywith = 0
     for base, dirs, files in os.walk(path):
       print base
       print '%d "try+with" out of %d "with" (%.1f%%) in %d files (partial)'
% (
           ntrywith, nwith, ntrywith*100.0/nwith if nwith else 0,
           nfiles)
       print
       for fn in files:
         if fn[-3:]!='.py': continue
         if 'CVS' in dirs: dirs.remove('CVS')
         if '.svn' in dirs: dirs.remove('.svn')
         fullfn = os.path.join(base, fn)
         #print fn
         nfiles += 1
         with open(fullfn) as f:
           try:
             was_try = False
             for toknum, tokval, _, _, _  in generate_tokens(f.readline):
               if toknum==NAME:
                 is_with = tokval == 'with'
                 if is_with:
                   nwith += 1
                   if was_try: ntrywith += 1
                 was_try = tokval == 'try'
           except Exception, e: print e
     print '%d "try+with" out of %d "with" (%.1f%%) in %d files' % (
           ntrywith, nwith, ntrywith*100.0/nwith if nwith else 0,
           nfiles)

process(sys.argv[1])
</code>

I got 2/25 on my code (1500 files, but many are rather old to use "with")

-- 
Gabriel Genellina




More information about the Python-ideas mailing list