[Python-ideas] Possible enhancement to typing

Steve Barnes gadgetsteve at live.co.uk
Mon Nov 6 02:39:53 EST 2017



On 06/11/2017 07:13, Steven D'Aprano wrote:
> On Sun, Nov 05, 2017 at 07:18:30PM +0000, Steve Barnes wrote:
> 
>> If a group of iterators were to be added to the typing module it would
>> be reasonably simple to automatically add and assert to any decorated
>> modules to ensure that such modules were always called with the
>> documented types.
> 
> "Iterators"?
> 
> 
>> I am thinking of decorators such as:
>>
>>    - @typing.assert_params_mismatch - this would provide a wrapper that
>> had auto-generated asserts that all the parameters were of designated types.
>>    - @typing.debug_assert_params_mismatch - this would provide a wrapper
>> that had auto-generated asserts that all the parameters were of
>> designated types only if a DEBUG environmental variable was set or similar.
> 
> That's what assert does: assert only runs when __DEBUG__ is true. That's
> not controlled by an environment variable, but by the -O flag to the
> interpreter.
> 
Good point.
> So your assert_params_mismatch and debug_assert_params_mismatch are
> effectively the same thing.
> 
> But using assert to check to perform argument checks is often an abuse
> of assert. To be more specific, using assert to check the value of
> public arguments in library code (where the arguments come from outside the
> library) is wrong, since you (the library author) cannot guarantee
> that your type tests will even run.
> 
> Using asserts for argument checking inside application code is more of a
> grey area, with arguments for and against using assert.
> 
> But in my opinion, the deciding factor is nearly always that an
> AssertionError is the wrong sort of exception. Outside of some fairly
> limited circumstances, most of which don't involve type-checking
> function arguments, using assert robs the caller of some useful
> information: the *kind* of error. (TypeError, ValueError, etc.)
> 
I see your point here.

> See here for further discussion:
> 
> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fimport-that.dreamwidth.org%2F676.html&data=02%7C01%7Cgadgetsteve%40live.co.uk%7C5e419db490b84018f2d208d524e612b4%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636455492928665911&sdata=EFZIvxGxO18vk5s97RnSHH9kAuLS3sXBxDNS9VbLWlw%3D&reserved=0
> 
> In general, I don't think we want to encourage such runtime type
> testing. Obviously there are exceptions -- library code should
> probably type check arguments, applications perhaps not -- and
> we're not exactly discouraging it either. There are already a number of
> third-party libraries that provide argument type tests at runtime, and
> I think that's probably the right place for them.
> 
I'll have to look out for them.
> 
> [...]
>> I also think that this might increase the uptake of typing by giving
>> some clear benefits outside of documentation and static type checking.
> 
> Problem is, the benefits of runtime type checking aren't clear. But the
> costs certainly are: if you want slow code, do lots and lots of runtime
> type checks.
> 
> 

Too much time spent writing safety critical code on my part then! I'll 
drop the idea.
-- 
Steve (Gadget) Barnes
Any opinions in this message are my personal opinions and do not reflect 
those of my employer.

---
This email has been checked for viruses by AVG.
http://www.avg.com



More information about the Python-ideas mailing list