[Zope] Zope Unsubscriptable object error

Mark Evans wavecat01@attbi.com
Fri, 19 Jul 2002 09:12:24 -0700


Hi,

I am having problems with an Unsubscriptable object error in Zope when the
returned tuple only contains one element.  The error goes away if the tuple
has 2 or more elements.  Any advice would be greatly appreciated.  See
details below.
Thanks in advance,
Mark

The following works in the python 2.1 interpreter:

>>> import DCOracle2 as dco
>>> d = dco.connect("scott/tiger@devbase")
>>> c = d.cursor()
>>> sql = "select status from ordered"
>>> c.execute(sql)
1
>>> foo = c.fetchone()
>>> print foo
['yes']
>>> print foo[0]
yes
>>>

When this is run as an external method in Zope, everything works, unless you
do
foo[0].  Then you get the error:

Zope Error


Zope has encountered an error while publishing this resource.


Error Type: TypeError
Error Value: unsubscriptable object
Traceback (innermost last):
  File C:\PROGRA~1\ZopeDev\lib\python\ZPublisher\Publish.py, line 150, in
publish_module
  File C:\PROGRA~1\ZopeDev\lib\python\ZPublisher\Publish.py, line 114, in
publish
  File C:\PROGRA~1\ZopeDev\lib\python\Zope\__init__.py, line 159, in
zpublisher_exception_hook
    (Object: clone_order)
  File C:\PROGRA~1\ZopeDev\lib\python\ZPublisher\Publish.py, line 98, in
publish
  File C:\PROGRA~1\ZopeDev\lib\python\ZPublisher\mapply.py, line 88, in
mapply
    (Object: clone_order_submissionAction)
  File C:\PROGRA~1\ZopeDev\lib\python\ZPublisher\Publish.py, line 39, in
call_object
    (Object: clone_order_submissionAction)
  File C:\PROGRA~1\ZopeDev\lib\python\OFS\DTMLMethod.py, line 127, in
__call__
    (Object: clone_order_submissionAction)
  File C:\PROGRA~1\ZopeDev\lib\python\DocumentTemplate\DT_String.py, line
473,
in __call__
    (Object: clone_order_submissionAction)
  File C:\PROGRA~1\ZopeDev\lib\python\DocumentTemplate\DT_Util.py, line 159,
in
eval
    (Object: checkOrderDatabase(idlist))
    (Info: idlist)
  File <string>, line 2, in f
  File 
C:\PROGRA~1\ZopeDev\lib\python\Products\ExternalMethod\ExternalMethod.py,
line 198, in __call__
    (Object: checkOrderDatabase)
    (Info: ((['1234A', '5678B'],), {}, None))
  File C:\Program Files\ZopeDev\Extensions\checkOrderDatabase.py, line 29,
in
main
TypeError: (see above)

What is going on here?? Zope won't let me subscript a tuple or a list?  If I
modify the sql such that it returns more than one column, then the
subscripting
calls work.  Grrr.
Thanks,
Mark

Here is the code for the external method:



import DCOracle2 as dco

# Begin Main Method
####################################
def main (idlist):
    finalresult=""
    dCon = dco.connect("scott/tiger@devbase")
    dCur = dCon.cursor()

    for id in idlist:
        sql = "SELECT status from ordered where id ='"+ str(id)+"'"
        dCur.execute(sql)
        foo = dCur.fetchone()
        status = str(foo[0])
        finalresult = finalresult+"ID: "+str(id)+" Status: "+status+"<BR>"

    return "id list is "+str(idlist) +"<BR>"+finalresult