TypeError: unsubscriptable object.

Balaji balaji at email.arizona.edu
Fri May 21 17:40:13 EDT 2004


Hello Everybody...

I have a problem..

This is the code...
--------------------------------------
class Stack:

	def __init__(self,expr):
		self.stackP=[]
		self.stackF=1
		self.a = {}
# 		self.stackManagement(expr)
		if not self.a.has_key('rhs'):
			self.a['rhs'] = 0
# 		self.a['rhs'] += self.popP()*self.popF()
	
	def pushP(self,obj):
		self.stackP.append(obj)
	
	def pushF(self,obj):
		 stackF=stackF*obj
		 return stackF
	
	def popP(self):
		rval=0
		rval=self.stackP.pop()
		return rval
	
	def popF(self,obj):
		stackF/=obj
		return stackF
		
	def peekP(self):
		rval=0
		rval= self.stackP[-1]
		return rval
	def peekF(self):
		rval=0
		rval= self.stackF[-1]
		return rval
	def stackManagement(self,expr):

		#Determine the next symbol
		if expr.__class__==E:                
			self.pushP(expr.operator)
			self.stackManagement(expr.left)
			self.stackManagement(expr.right)
		else:
			self.pushP(expr)
		if len(self.stackP) > 1:
			s = self.peekP()
			prev = self.stackP[-2]
			if prev in ('*','+','/','-'):
				if prev in ('*','/'):
					self.pushF(self.peekF()*s)
			else:#stackP[-3] must be an operator.
				top=self.popP()
				mid =self.popP()
				op=self.popP()
				if op == '*':
					if top.__class__==V:
						self.a += self.popF(self.stackF)
						    
						self.stackManagement(0)
					else:
						self.popF(self.stackF)
						self.stackManagement(mid*top)
				if op == '+':
					if top.__class__==V:
						self.a+= self.peekF()
						   
						self.stackManagement(0)
					else:
						self.stackManagement(mid+top)
				if op == '-':
					if top.__class__==V:
						self.a -= self.peekF()
						   
						self.stackManagement(0)
					else:
						self.stackManagement(mid-top)
				if op == '/':
					if top.__class__==V:
						self.a /= self.popF(self.stackF)/(mid**2)
						
						self.stackManagement(0)
					else:
						self.popF(self.stackF)
						self.stackManagement(top/mid)
		else:
			self.a['rhs'] += self.popP(self.stackP)*self.popF(self.stackF)

and I'm giveing the following calls...
---------------------------

from expression import *
from generation import*

(x,y,z) = (V(),V(),V()) # making instances of Variable class

e1=x+y+z

s=Stack(e1)

s.stackManagement(e1)
----------------------------------------------
I'm getting the following error TypeError: unsubscriptable object...
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "generation.py", line 175, in stackManagement
    self.stackManagement(expr.left)
  File "generation.py", line 176, in stackManagement
    self.stackManagement(expr.right)
  File "generation.py", line 199, in stackManagement
    self.a+= self.peekF()
  File "generation.py", line 168, in peekF
    rval= self.stackF[-1]
-------------------------------------
I 'm at my wit ends..

Can anyone help...

Thx in advance



More information about the Python-list mailing list