Curious string behavior

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • mark

    Curious string behavior

    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(li ne, ',')
    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\Py thon\lib\site-packages\Python win\pywin\frame work\scriptut
    ils.py", line 310, in RunScript
    exec codeObject in __main__.__dict __
    File "C:\Program Files\Python\te st1.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


  • OKB (not okblacke)

    #2
    Re: Curious string behavior

    mark wrote:
    [color=blue]
    > 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(li ne, ',')
    > print 'Address2 type (second check): ', type(address2)[/color]
    <snip>[color=blue]
    > Address2 Type (first check): <type 'str'>
    > Address2 type (second check):
    > Traceback (most recent call last):
    > File
    > "C:\PROGRA~1\Py thon\lib\site-packages\Python win\pywin\frame work\scri
    > ptut ils.py", line 310, in RunScript
    > exec codeObject in __main__.__dict __
    > File "C:\Program Files\Python\te st1.py", line 7, in ?
    > print 'Address2 type (second check): ', type(address2)
    > TypeError: 'str' object is not callable[/color]

    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.

    --
    --OKB (not okblacke)
    "Do not follow where the path may lead. Go, instead, where there is
    no path, and leave a trail."
    --author unknown

    Comment

    • Diez B. Roggisch

      #3
      Re: Curious string behavior

      > address2 = ' '[color=blue]
      > line = 'function, dealer, type, firstname, lastname, vin, blank'
      > print 'Address2 Type (first check): ', type(address2)
      > function, dealer, type, firstname, lastname, vin, blank =[/color]
      ^^^^^
      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

      Comment

      Working...