[Python-Dev] python3k : imp.find_module raises SyntaxError

Ron Adam rrr at ronadam.com
Mon Nov 29 21:21:07 CET 2010



On 11/29/2010 01:22 PM, Brett Cannon wrote:
> On Mon, Nov 29, 2010 at 03:53, Sylvain Thénault
> <sylvain.thenault at logilab.fr>  wrote:
>> On 25 novembre 11:22, Ron Adam wrote:
>>> On 11/25/2010 08:30 AM, Emile Anclin wrote:
>>>>
>>>> hello,
>>>>
>>>> working on Pylint, we have a lot of voluntary corrupted files to test
>>>> Pylint behavior; for instance
>>>>
>>>> $ cat /home/emile/var/pylint/test/input/func_unknown_encoding.py
>>>> # -*- coding: IBO-8859-1 -*-
>>>> """ check correct unknown encoding declaration
>>>> """
>>>>
>>>> __revision__ = 'éééé'
>>>>
>>>>
>>>> and we try to find that module :
>>>> find_module('func_unknown_encoding', None). But python3 raises SyntaxError
>>>> in that case ; it didn't raise SyntaxError on python2 nor does so on our
>>>> func_nonascii_noencoding and func_wrong_encoding modules (with obvious
>>>> names)
>>>>
>>>> Python 3.2a2 (r32a2:84522, Sep 14 2010, 15:22:36)
>>>> [GCC 4.3.4] on linux2
>>>> Type "help", "copyright", "credits" or "license" for more information.
>>>>>> >from imp import find_module
>>>>>>> find_module('func_unknown_encoding', None)
>>>> Traceback (most recent call last):
>>>>    File "<stdin>", line 1, in<module>
>>>> SyntaxError: encoding problem: with BOM
>>>
>>> I don't think there is a clear reason by design.  Also try importing
>>> the same modules directly and noting the differences in the errors
>>> you get.
>>
>> IMO the point is that we can consider as a bug the fact that find_module
>> tries to somewhat read the content of the file, no? Though it seems to only
>> doing this for encoding detection or like since find_module doesn't choke on
>> a module containing another kind of syntax error.
>>
>> So the question is, should we deal with this in pylint/astng, or can we expect
>> this to be fixed at some point?
>
> Considering these semantics changed between Python 2 and 3 w/o a
> discernable benefit (I would consider it a negative as finding a
> module should not be impacted by syntactic correctness; the full act
> of importing should be the only thing that cares about that), I would
> consider it a bug that should be filed.

The output of imp.find_module() returns an open file io object, and it's 
output feeds directly into to imp.load_module().

 >>> imp.find_module('pydoc')
(<_io.TextIOWrapper name=4 encoding='utf-8'>, 
'/usr/local/lib/python3.2/pydoc.py', ('.py', 'U', 1))

So I think the imp.find_module() is suppose to be used when you *do* want 
to do the full act of importing and not for just finding out if or where 
module xyz exists.


Ron





More information about the Python-Dev mailing list