----- Original Message ----- From: "Graham Guttocks" <graham_guttocks at yahoo.co.nz> To: <python-list at python.org> Sent: Tuesday, April 10, 2001 5:23 PM Subject: call of non-function (type string) error > Greetings, > > Any suggestions on how to get around this problem? I'm trying to call > a function using variables, but it obviously doesn't work that way. > > ----------------------------------------------- > > CIPHER = "DES3" > exec "from Crypto.Cipher import %s" % CIPHER > > # cipherobj = DES3.new(KEY, DES3.CBC, IV) > cipherobj = CIPHER + 'new'(KEY,CIPHER + '.CBC',IV) > ----------------------------------------------- > > > Traceback (most recent call last): > File "<stdin>", line 10, in ? > TypeError: call of non-function (type string) I'm having almost as much trouble as python trying to figure out your syntax :-) I'm not familiar with the Crypto module. I'm sure someone will give you a correct anwer here but you probably should practice using eval and exec until you know -exactly- what they do. Only practice will help you understand how strings and the python interpreter interact, and the difference between a string literal and a named object or expression. Start with small examples where there are few unknowns. Here's what doesn't work in your code: ... CIPHER + 'new'(...) CIPHER is a string and 'new' is a string, so CIPHER + 'new' is a string with value "DES3new". You can't invoke a string as if it were a function, (and anyway you are missing a "."). Change it to ... eval(CIPHER+'.new')(...) ... (..., CIPHER + '.CBC', ...) CIPHER+'.CBC' is a string equal to "DES3.CBC". The function wants the value of the expression DES3.CBC. A string is not the same as the value of it's expression. That's why we have the eval() function. Change it to ... (..., eval(CIPHER + '.CBC'), ...) ... ( ..., IV) I don't know what IV is. A better approach to this whole thing is this: import Crypto.Cipher CIPHER = "DES3" ciphertype = getattr(Crypto.Cipher, CIPHER) cipherobj = ciphertype.new(KEY, ciphertype.CBC, IV) Have fun... - Ken Seehof kseehof at neuralintegrator.com www.neuralintegrator.com
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4