Curious string behavior

M

mark

I've encountered an anomaly while using the string module (specifically,
string.split). Here's the snippet:

import string

address2 = ' '
line = 'function, dealer, type, firstname, lastname, vin, blank'
print 'Address2 Type (first check): ', type(address2)
function, dealer, type, firstname, lastname, vin, blank =
string.split(line, ',')
print 'Address2 type (second check): ', type(address2)

I've extracted this from a larger script, but the error happens roughly
the same way. Now, here's what I would expect to see:

Address2 Type (first check): <type 'str'>
Address2 type (second check): <type 'str'>

Here's what I get instead:

Address2 Type (first check): <type 'str'>
Address2 type (second check):
Traceback (most recent call last):
File
"C:\PROGRA~1\Python\lib\site-packages\Pythonwin\pywin\framework\scriptut
ils.py", line 310, in RunScript
exec codeObject in __main__.__dict__
File "C:\Program Files\Python\test1.py", line 7, in ?
print 'Address2 type (second check): ', type(address2)
TypeError: 'str' object is not callable

What the heck is going on here? I figure I'm just missing something.

- Mark Daley
Product Manager
Diversiform, Inc.
1-800-444-3445
 
D

Diez B. Roggisch

address2 = ' '
line = 'function, dealer, type, firstname, lastname, vin, blank'
print 'Address2 Type (first check): ', type(address2)
function, dealer, type, firstname, lastname, vin, blank =
^^^^^
Here you rebind the name type (which is initially bound to <type 'type'>,
that can be called with an argument to get its type) to the string ' '.
Hence the second

type(address2)

doesn't work.

You can do this on all symbols/names in python, which can cause confusing
errors.

Diez
 
O

OKB (not okblacke)

mark said:
address2 = ' '
line = 'function, dealer, type, firstname, lastname, vin, blank'
print 'Address2 Type (first check): ', type(address2)
function, dealer, type, firstname, lastname, vin, blank =
# ^ LINE ABOVE CONTAINS ERROR
string.split(line, ',')
print 'Address2 type (second check): ', type(address2)
Address2 Type (first check): <type 'str'>
Address2 type (second check):
Traceback (most recent call last):
File
"C:\PROGRA~1\Python\lib\site-packages\Pythonwin\pywin\framework\scri
ptut ils.py", line 310, in RunScript
exec codeObject in __main__.__dict__
File "C:\Program Files\Python\test1.py", line 7, in ?
print 'Address2 type (second check): ', type(address2)
TypeError: 'str' object is not callable

In the marked line, you assign a string to a variable called
"type". This means that you overwrote your reference to the type
function that you are trying to use in type(address2). When you "call"
type(address2) you are now trying to call the string which you have
assigned to the name "type". Use a different name for your variable (a
name that the library doesn't use) and you will be fine.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top