Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #34529 > unrolled thread
| Started by | Victor Hooi <victorhooi@gmail.com> |
|---|---|
| First post | 2012-12-09 16:52 -0800 |
| Last post | 2012-12-10 02:42 +0000 |
| Articles | 5 — 4 participants |
Back to article view | Back to comp.lang.python
TypeError: 'in <string>' requires string as left operand, not Element Victor Hooi <victorhooi@gmail.com> - 2012-12-09 16:52 -0800
Re: TypeError: 'in <string>' requires string as left operand, not Element Roy Smith <roy@panix.com> - 2012-12-09 20:08 -0500
Re: TypeError: 'in <string>' requires string as left operand, not Element Victor Hooi <victorhooi@gmail.com> - 2012-12-09 17:09 -0800
Re: TypeError: 'in <string>' requires string as left operand, not Element Dave Angel <d@davea.name> - 2012-12-09 20:19 -0500
Re: TypeError: 'in <string>' requires string as left operand, not Element MRAB <python@mrabarnett.plus.com> - 2012-12-10 02:42 +0000
| From | Victor Hooi <victorhooi@gmail.com> |
|---|---|
| Date | 2012-12-09 16:52 -0800 |
| Subject | TypeError: 'in <string>' requires string as left operand, not Element |
| Message-ID | <8c78344a-8019-450a-bfdf-13508bf75292@googlegroups.com> |
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
[toc] | [next] | [standalone]
| From | Roy Smith <roy@panix.com> |
|---|---|
| Date | 2012-12-09 20:08 -0500 |
| Message-ID | <roy-650A18.20083909122012@news.panix.com> |
| In reply to | #34529 |
In article <8c78344a-8019-450a-bfdf-13508bf75292@googlegroups.com>,
Victor Hooi <victorhooi@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.
[toc] | [prev] | [next] | [standalone]
| From | Victor Hooi <victorhooi@gmail.com> |
|---|---|
| Date | 2012-12-09 17:09 -0800 |
| Message-ID | <a5198d6b-55e4-4092-a0e2-686edab61f93@googlegroups.com> |
| In reply to | #34529 |
Hi,
Ignore me - PEBKAC...lol.
I used "root" both for the os.walk, and also for the root XML element.
Thanks anyhow =).
Cheers,
Victor
On Monday, 10 December 2012 11:52:34 UTC+11, 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))
>
>
>
> 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
[toc] | [prev] | [next] | [standalone]
| From | Dave Angel <d@davea.name> |
|---|---|
| Date | 2012-12-09 20:19 -0500 |
| Message-ID | <mailman.667.1355102395.29569.python-list@python.org> |
| In reply to | #34529 |
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.
--
DaveA
[toc] | [prev] | [next] | [standalone]
| From | MRAB <python@mrabarnett.plus.com> |
|---|---|
| Date | 2012-12-10 02:42 +0000 |
| Message-ID | <mailman.669.1355107363.29569.python-list@python.org> |
| In reply to | #34529 |
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'.
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.python
csiph-web