TypeError: 'in <string>' requires string as left operand, not Element
MRAB
python at mrabarnett.plus.com
Sun Dec 9 21:42:50 EST 2012
On 2012-12-10 01:19, Dave Angel wrote:
> On 12/09/2012 07:52 PM, Victor Hooi wrote:
>> Hi,
>>
>> I'm getting a strange error when I try to run the following:
>>
>> for root, dirs, files in os.walk('./'):
>> for file in files:
>> if file.startswith('ml') and file.endswith('.xml') and 'entity' not in file:
>> print(root)
>> print(file)
>> with open(os.path.join(root, file), 'r') as f:
>> print(f.name)
>> try:
>> tree = etree.parse(f)
>> root = tree.getroot()
>> print(f.name)
>> print(root.tag)
>> except xml.parsers.expat.ExpatError as e:
>> print('Unable to parse file {0} - {1}'.format(f.name, e.message))
>>
>
> Where's the printout of the root and file variables? You're asking
> os.path.join to work on them, and it's clearly upset about their types.
> I see print statements, so you clearly were thinking along these lines.
> But you don't show them. BTW, I'd be using print(repr(root)) and
> print(repr(file)) instead, so you get a better idea of their type and value.
>
> My guess for the problem is that you're trashing 'root' with the
> contents of your try block. Try using a different name for the xml stuff.
>
>> The error is:
>>
>> Traceback (most recent call last):
>> File "foo.py", line 275, in <module>
>> marketlink_configfiles()
>> File "foo.py", line 83, in bar
>> with open(os.path.join(root, file), 'r') as f:
>> File "C:\Python27\lib\ntpath.py", line 97, in join
>> if path[-1] in "/\\":
>> TypeError: 'in <string>' requires string as left operand, not Element
>>
>> Cheers,
>> Victor
>
> Incidentally, 'file' is a builtin type, so it's probably not a good idea
> to hide it by using it as your own local variable.
>
It looks like Python 3 to me, which doesn't define 'file'.
More information about the Python-list
mailing list