2

Just playin around class

def func(*args, **kwargs):
    print args, kwargs

class Klass(func): pass

it throws error

TypeError: Error when calling the metaclass bases function() argument 1 must be code, not str

What does it mean, i am passing no str nowhere? and yes I should be passing class in bases but why didn't error say that, instead of this cryptic error?

user232137
  • 23
  • 1
  • 3
  • The title and most of the question suggests you don't understand why this is happening, but you're really asking why didn't the error message have different text. –  Feb 22 '10 at 05:35
  • yes I do not understand why it throws such cryptic error, instead of saying "functions can not be class base", i want to know why it is thorwing such cryptic error – user232137 Feb 22 '10 at 05:40
  • Python throws all kinds of cruddy errors! – Mike Graham Feb 22 '10 at 05:50
  • Python3.1 has made the message even less helpful **`TypeError: function() argument 1 must be code, not str`** – John La Rooy Feb 22 '10 at 06:18

1 Answers1

2

see here for the reason for the cryptic msg

http://bugs.python.org/issue6829

questions Error when calling the metaclass bases: function() argument 1 must be code, not str has same problem.

Edit: play-around

Though you can use metaclass to make it work in a twisted way ;)

def func(name, klassDict):
    return type(name, (), klassDict)

class MyMeta(type):
    def __new__(self, name, bases, klassDict):
        return bases[0](name, klassDict)

class Klass(func):
    __metaclass__ = MyMeta

print Klass
Community
  • 1
  • 1
Anurag Uniyal
  • 85,954
  • 40
  • 175
  • 219