extracting keywords from %(keyword)s-based templates

Jeff Shannon jeff at ccvcorp.com
Sat Sep 1 01:04:28 CEST 2001


Andrew Dalke wrote:

> class KeywordTrap:
>   def __init__(self):
>      self.allwords = {}
>   def __getitem__(self, keyword):
>      self.allwords[keyword] = 1
>      return self
>   def __int__(self): return 0
>   def __str__(self): return ""
>   def __float__(self): return 0.0
>   def __oct__(self): return "0"
>   def __hex__(self): return "0"
>   def __long__(self): return 1L

Well, I *did* test this... I threw the above class into a module with:

def test():
    trap = KeywordTrap()
    "Testing ... %d %s %f %(one) %(two) %(test)" % trap
    print trap.allwords.keys()

if __name__ == '__main__':
    test()

When I ran it, I got:

Traceback (most recent call last):
  File "c:\python20\pythonwin\pywin\framework\scriptutils.py", line 301,
in RunScript
    exec codeObject in __main__.__dict__
  File "C:\Python20\Projects\TestScript1.py", line 24, in ?
    test()
  File "C:\Python20\Projects\TestScript1.py", line 19, in test
    "Testing ... %d %s %f %(one) %(two) %(test)" % trap
TypeError: not enough arguments for format string
>>>

So I tried getting rid of the %d %s etc, and just using the keyword
formats...

Traceback (most recent call last):
  File "c:\python20\pythonwin\pywin\framework\scriptutils.py", line 301,
in RunScript
    exec codeObject in __main__.__dict__
  File "C:\Python20\Projects\TestScript1.py", line 23, in ?
    test()
  File "C:\Python20\Projects\TestScript1.py", line 18, in test
    "Testing ...  %(one) %(two) %(test)" % trap
ValueError: incomplete format
>>>

Bummer.  Maybe we'd have to inherit from UserDict?  I haven't messed
around with that at all...

(btw, this is on Python 2.0 under Win95)

Jeff Shannon
Technician/Programmer
Credit International





More information about the Python-list mailing list