Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #34529 > unrolled thread

TypeError: 'in <string>' requires string as left operand, not Element

Started byVictor Hooi <victorhooi@gmail.com>
First post2012-12-09 16:52 -0800
Last post2012-12-10 02:42 +0000
Articles 5 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  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

#34529 — TypeError: 'in <string>' requires string as left operand, not Element

FromVictor Hooi <victorhooi@gmail.com>
Date2012-12-09 16:52 -0800
SubjectTypeError: '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]


#34531

FromRoy Smith <roy@panix.com>
Date2012-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]


#34532

FromVictor Hooi <victorhooi@gmail.com>
Date2012-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]


#34534

FromDave Angel <d@davea.name>
Date2012-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]


#34537

FromMRAB <python@mrabarnett.plus.com>
Date2012-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