What's the best way to minimize the need of run time checks?

Christian Gollwitzer auriocus at gmx.de
Sat Aug 13 14:31:09 EDT 2016


Am 12.08.16 um 11:58 schrieb BartC:
> On 12/08/2016 10:45, Chris Angelico wrote:
>> On Fri, Aug 12, 2016 at 7:38 PM, BartC <bc at freeuk.com> wrote:
>>> You can be too dynamic. Take an example like this:
>
>>>  d.yaer=1999
>>>
>>>  print (d.day,d.month,d.year)
>
>>> This would never get past a static language nor some that also have
>>> dynamic
>>> types.
>>
>> Nor will it get past a lot of linters. Or unit tests. There are other
>> solutions.
>
> How would a linter know that you didn't /want/ to create a new attribute
> called 'yaer'?

It is possible to create an attribute outside of the class, but it is 
unusual. I tried your example using pylint. It gives me:

W:  9, 0: Attribute 'yaer' defined outside __init__ 
(attribute-defined-outside-init)

Granted, pylint also spits an enormous amount of other stylistic 
warnings about spaces and "wrong" indents which, strangely, have the 
same weight "warning" as this bug, so it's a bit hard to find.

A linter from another language I use also spell-checks variable names, 
i.e. if it finds two variables with suspiciously similar names, it 
reports it. Of course the linter never knows for sure, it can only give 
warnings.

	Christian



More information about the Python-list mailing list