On Mon, Nov 29, 2010 at 12:21, Ron Adam <r...@ronadam.com> wrote:
>
>
> On 11/29/2010 01:22 PM, Brett Cannon wrote:
>>
>> On Mon, Nov 29, 2010 at 03:53, Sylvain Thénault
>> <sylvain.thena...@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.

Going with your line of argument, why can't imp.load_module be the
call that figures out there is a syntax error? If you look at this
from the perspective of PEP 302, finding a module has absolutely
nothing to do with the validity of the found source, just that
something was found somewhere which (hopefully) contains code that
represents the module.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to