problem with str()

Larry Bates lbates at websafe.com
Thu Mar 15 16:24:45 EDT 2007


7stud wrote:
> I can't get the str() method to work in the following code(the last
> line produces an error):
> 
> ============
> class test:
>         """class test"""
>         def __init__(self):
>                 """I am init func!"""
>                 self.num = 10
>                 self.num2 = 20
>         def someFunc(self):
>                 """I am someFunc in test!"""
>                 print "hello"
> 
> 
> obj = test()
> obj.someFunc()
> names = dir(obj)
> print names
> 
> methodList = [str for str in names if callable(getattr(obj, str))]
> print methodList
> 
> x = getattr(obj, methodList[0]).__doc__
> print x
> print type(x)
> print str(getattr(obj, methodList[0]).__doc__)
> ===========
> 
> Here is the output:
> 
> $ python test1.py
> hello
> ['__doc__', '__init__', '__module__', 'num', 'num2', 'someFunc']
> ['__init__', 'someFunc']
> I am init func!
> <type 'str'>
> Traceback (most recent call last):
>   File "test1.py", line 23, in ?
>     print str(getattr(obj, methodList[0]).__doc__)
> TypeError: 'str' object is not callable
> 
> This is part of some code in Diving Into Python,Chapter 4.  In case a
> function doesn't have a __doc__ string, and therefore __doc__ returns
> None, the code needs to convert each __doc__ to a string so that the
> result is guaranteed to be a string.
> 

You masked the built-in str method in your list comprehension.

Try changing to:

methodList = [s for s in names if callable(getattr(obj, str))]

I'll bet it will work then.

-Larry



More information about the Python-list mailing list