One option would be to decorate those functions and provide an implementation to __bool__ or __nonzero__ which raises an exception.

Something like this

In [1]: def a(): pass
In [2]: def r(): raise RuntimeError('Do not forget to call this')
In [3]: a.__bool__ = r
In [4]: if a: pass

I don't have an environment to test if this is possible. This would allow marking with a decorator functions that might be misleading or that are a common source of issues for new users.

--
David Navarro


On 11 October 2016 at 17:34, Ethan Furman <ethan@stoneleaf.us> wrote:
On 10/11/2016 07:00 AM, Steven D'Aprano wrote:
On Tue, Oct 11, 2016 at 02:41:34PM +0200, Sven R. Kunze wrote:

on django-developers, an intriguing idea appeared:
https://groups.google.com/d/msg/django-developers/4bntzg1HwwY/HHHjbDnLBQAJ

"""
It seems to me that the default `method.__bool__` is undesirable in
Jinja2 templates. I do not know Jinja2 well enough, but maybe they could
benefit from a patch where `if`-statements give a warning/error when the
expression is a callable (with the default `FunctionType.__bool__`?
This would solve the issue not just for the methods you mention, but
more in general.

That should be easy enough to do as a custom descriptor.

But I would not like to see the default function or method __bool__
raise a warning.

[...]

So I think this is something that Django/Jinja2 should implement for its
own methods that need it, it should not be a general feature of all
Python functions/methods.

Agreed. Python is a /general/-purpose programming language.  We should not make changes to help one subset of users when those changes will harm another subset (and being flooded with false positives is harmful) -- particularly when easy customization is already available.

--
~Ethan~

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/



--
David Navarro Estruch