Python gotcha – Forgetting the parentheses after a method name


Technically, I suppose this is not really a gotcha. But for someone like me who has to switch between scripting languages frequently, it’s a potential “gotcha”.

In Python, functions and methods are legitimate objects. That’s why you can do this:

App = Application
LogMsg = App.LogMessage
ClassName = App.ClassName

but sometimes you might forget the parentheses after a name, and unlike JScript, you won’t get a syntax error (at least not for the missing parentheses). For example, this little snippet will give you a “# AttributeError: ‘NoneType’ object has no attribute ‘AddKey'” error:

param = Application.Dictionary.GetObject( "null.kine.local.rotx" )

if str(param.Source) == 'None':
    param.AddFcurve
    fcurve = param.Source
    fcurve.AddKey( 10, 90 )
    fcurve.AddKey( 20, 45 )

In JScript, you’d get a syntax error for the missing parentheses. I’m not saying that that is better 😉 it’s just a difference you have to be aware of.

param = Dictionary.GetObject( "null.kine.local.rotx" )
param.AddFcurve
// ERROR : Object doesn't support this property or method - [line 3]

Some related links: