Perhaps some implementation might consider 0 to be a 'NULL' value, assume it's null data and thus ignore it.
>>> NULL == 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'NULL' is not defined
Even None, which is as close to NULL you are going to get in Python is not 0. >>> None == 0
False >>> 'truthy' if None else 'falsy'
'falsy'
>>> 'truthy' if False else 'falsy'
'falsy'
>>> 'truthy' if 0 else 'falsy'
'falsy'Implicit casts -- including to booleans -- are dangerous, but if you try to write APIs to try to avoid every bad thing that might happen with naive use of implicit casting in every language that might be used to consume your API, you won't be able to do anything at all.
Out[1]: False
Idiomatic Python may say "if not user_id:" and erroneously skip this.
Idiomatic test for `None` is:
if something is None:
# ...
It would be incorrect to use `if not something:` here.