G
George Henry
I am a Python newbie, using IDLE, writing a lexical analyzer for a small
expression language in Python 2.2.3.
class PSILex:
ops = ["~", "!", "@", ... "|", "||", ... ]
...
def __findAtom(self):
result = ""
ops = [op for op in PSILex.ops if self.text.startswith(op)]
.... results in a traceback and "TypeError: expected a character buffer
object." In trying to figure out what was going on, in the Python Shell I
subsequently tried
with the same result. Printing type(self.text) immediately prior ot the
above line proves that that attribute's type has not been compromised, so
the problem appears to be with 'op'.
yields "AttributeError: 'int' object has no attribute 'startswith',"
however:
produces a list of <type 'str'> objects, as would be expected. So, what is
op? Is it a string, an int, or something else? It appears that the
interpreter may be confused. I persuaded the interpreter to cooperate by
injecting an explicit evaluation of type(op):
ops = [op for op in PSILex.ops if type(op) == type("") and \
self.text.startswith(op)]
and this does what I want, and what I would expect without 'type(op) ==
type("") and '.
Can someone explain what is happening here? Or should I send my code to
ww.python.org as a "defect report?"
Regards,
George
_________________________________________________________________
Protect your PC - get McAfee.com VirusScan Online
http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
expression language in Python 2.2.3.
class PSILex:
ops = ["~", "!", "@", ... "|", "||", ... ]
...
def __findAtom(self):
result = ""
ops = [op for op in PSILex.ops if self.text.startswith(op)]
.... results in a traceback and "TypeError: expected a character buffer
object." In trying to figure out what was going on, in the Python Shell I
subsequently tried
[op for op in PSILex.ops if "|| hello".startswith(op)]
with the same result. Printing type(self.text) immediately prior ot the
above line proves that that attribute's type has not been compromised, so
the problem appears to be with 'op'.
[op for op in PSILex.ops if op.startswith("|| hello")]
yields "AttributeError: 'int' object has no attribute 'startswith',"
however:
[type(op) for op in PSILex.ops]
produces a list of <type 'str'> objects, as would be expected. So, what is
op? Is it a string, an int, or something else? It appears that the
interpreter may be confused. I persuaded the interpreter to cooperate by
injecting an explicit evaluation of type(op):
ops = [op for op in PSILex.ops if type(op) == type("") and \
self.text.startswith(op)]
and this does what I want, and what I would expect without 'type(op) ==
type("") and '.
Can someone explain what is happening here? Or should I send my code to
ww.python.org as a "defect report?"
Regards,
George
_________________________________________________________________
Protect your PC - get McAfee.com VirusScan Online
http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963