[Python-ideas] Add 'use warnings' directive, like in Perl

Eduard Bondarenko eduardbpy at gmail.com
Wed Feb 11 09:33:53 CET 2015


Andrew,

Eduard, if you're going to suggest changes to Python, you really ought to
> first learn the current version, 3.4, and use it in your examples, rather
> than 2.7. (And use PEP8 style, too.)
>
> In simple cases like this, it doesn't make any real difference, and people
> can understand what you're suggesting--but it may still make people
> subconsciously less receptive (as in, "if he's not even willing to keep up
> with Python and see what we've improved in the last decade, what are the
> chances he'll have any good insight that's worth paying attention to that
> we haven't already thought of?").


I am agree with you. It was my fault.


2015-02-11 4:30 GMT+02:00 Stephen J. Turnbull <stephen at xemacs.org>:

> Eduard Bondarenko writes:
>
>  > So I can type whatever I want in else block and someone can detect
>  > it after the several years..
>
> That's a shame.  However, such errors are not the only way for severe
> errors to occur in rarely used branches.  As long as your static tool
> can't handle *all* bugs, there's a cost/benefit question of whether
> the (1) programmer effort to add and maintain the functionality
> (including updating it for new features, especially keywords, and
> formerly illegal syntax), and (2) the additional time to run it are
> justified by the likely benefit in reduced bugginess.
>
> The cost/benefit issue is of course always present, but it becomes
> discouraging here because the only way to detect non-syntax bugs
> before runtime is careful code review, and that is likely to catch
> most syntax bugs -- the benefit to additional compile-time checking is
> small.
>
> Note that I'm not sure that the Python compiler currently knows enough
> to provide the warnings you want.  Consider:
>
>     def doit():
>         print(a)
>     a = "It works!"
>     doit()
>
> Because Python is a dynamic language, the names 'a' and 'doit' (and
> 'print', for that matter) must be looked up at runtime, returning
> objects.  This means that compiling that program does not require that
> the compiler know whether 'a', 'doit', and 'print' are defined!  So
> adding those warnings might require major changes to the compiler.
>
>  > And the first thing that I have to do programming in Python is to
>  > download analyser tool..
>
> The SEI would say "No no no!  The first thing you need to do is
> *review your code*!"  IDE developers would say "why aren't you using
> identifier completion?", etc, etc.  This "need" for warnings from the
> python interpreter is very much a personal preference on your part.
> There's nothing wrong with having such preferences, and nothing wrong
> with expressing them here.  You might come up with something with wide
> applicability to new users or to less frequent users that the heavy
> users who are the bulk of developers would miss.
>
> However, I think that for both typical new users (at least those whose
> job title is marketer or sociologist or lawyer) and less frequent
> users the non-syntax G'IGO problem (where G' = good and G = garbage)
> is much larger than the occasional uncaught NameError.  Such users
> don't branch as heavily as library module authors, typically branch
> only for easily conceptualized cases or cases observed early in
> development, and so often are quite well-served by "all errors are
> fatal at runtime".  And of course this is all personal opinion, too,
> but I suspect similar ones are shared by many core Python developers
> (and I'm not one of those! so nothing I say is authoritative <wink />).
>
>  > I understand the importance of static analyser tools, but in this
>  > case (to check simple things like a variables and functions names)
>  > it is like "To use a sledge-hammer to crack a nut.".
>
> Again, this is a personal preference (and again, there's nothing wrong
> with having one or expressing it).  The CPython community has
> generally agreed that the virtual machine (including the compiler and
> interpreter) should be kept as simple and clean of extra features as
> possible.  A change to the compiler merely to warn about suspicious
> constructs is considered the "sledgehammer" here.  On the other hand,
> because the constructs used by the compiler are exposed as ordinary
> classes, writing separate tools is fairly easy.
>
> Also, I don't really understand your sledgehammer analogy.  It's true
> that catching undefined names could be done separately, but running a
> static analysis tool will catch many other kinds of bugs that any
> given warning filter would not.  There are many simple (one-pass,
> line-by-line) "linters" that only look within a single logical line
> for suspicious constructs, others that will check things like
> assignment before use.  You can pick the level of analysis you like.
>
>  > PS. Within C++
>                  ^ *** Warning *** Every line of this program contains
>                    obscure and DANGEROUS constructs!
>
> <wink />
>
>  > or other languages I should use static analyser tools to check real
>  > bug-prone situation, but in new, modern Python I should use third-
>  > party tools to check the real simple errata.
>
> I suppose from your mention of "third-party" tools in the case of C++
> you mean "vendor-provided" static analyzer tools, though you didn't
> write that.  The answer to the implied question is "yes and no".  C++
> compiler optimizations are notoriously buggy and backward-
> incompatible, and implemented differently by each vendor.  And there's
> a tradition (maintained for "political" reasons in the case of GCC,
> leading to RMS's resistance to a plugin architecture and exporting the
> AST) of packing all functionality into a single command, even a single
> program.  Vendor-specific, vendor-implemented checkers make a heck of
> a lot of sense.  By contrast with GCC, LLVM's C and C++ tools look a
> lot like Python, with competing implementations of quite a few modules
> in and out of the LLVM project proper.
>
> Now, in Python as I mentioned, it's relatively easy to write checkers,
> and there are many of them.  There is some core agreement on the
> required features, but the degree of agreement is considered
> insufficient to justify adding a module to the standard library,
> especially as many of the various checkers are in active development
> getting new features.  This isn't a blanket opposition; years ago
> support for "function annotations" was added, and just recently a
> specific syntax for type hinting has been decided (pretty much) and
> the PEP will probably be approved shortly, addressing both improved
> diagnostics and optimization needs.
>
> Finally (and I think nobody has mentioned this yet), downloading third-
> party tools has always been fairly easy in Python due to the package
> repository PyPI, and continuous effort has been expended over the
> years on making it easier.  In fact, for many practical purposes the
> "batteries included" philosophy has become impractical to support.  So
> before you can begin to write a program, you need to download a module
> (and its documentation) to support functionality needed by your
> program.  This is true for almost everybody nowadays.  In response,
> the download and installation tool "pip" was recently added to the
> core distribution of both Python 2 and Python 3.  That kind of
> generally useful effort is valued more in Python than simple addition
> of features that most likely would not be used by most Python
> programmers, not even implicitly in the standard library.  And the
> community deliberately aims at such improvements.
>
> Your mileage may vary, of course, but having observed the community
> for over a decade now I believe the above to be a fairly accurate
> expression of some of the core values of this community.
>
> Regards,
>
> Steve
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20150211/c3eb3f67/attachment-0001.html>


More information about the Python-ideas mailing list