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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4