TypeError: 'in <string>' requires string as left operand, not Element
Roy Smith
roy at panix.com
Sun Dec 9 20:08:39 EST 2012
In article <8c78344a-8019-450a-bfdf-13508bf75292 at googlegroups.com>,
Victor Hooi <victorhooi at gmail.com> 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))
>
> 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
The first thing I would do is try to figure out if it's happening in the
join() or the open(). Try refactoring this as:
> temp = os.path.join(root, file)
> with open(temp, 'r') as f:
and see which line generates the exception. I'm guessing it's the
join(), but it helps to make sure (so you don't go down some rabbit
hole). Next, I would try to construct a minimal test case. Keep
hacking away code until you get down to the smallest thing which is
produce the problem. I'm guessing something like:
> for root, dirs, files in os.walk('./'):
> for file in files:
> os.path.join(root, file)
might do it. Hopefully that will narrow things down a bit.
More information about the Python-list
mailing list