this post was submitted on 24 Apr 2025
59 points (94.0% liked)

Python

7045 readers
46 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

๐Ÿ“… Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

๐Ÿ Python project:
๐Ÿ’“ Python Community:
โœจ Python Ecosystem:
๐ŸŒŒ Fediverse
Communities
Projects
Feeds

founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 2 points 1 day ago

you necessarily provide the reader with fewer hints as to what is actually in that variable

Then make it explicit. I much prefer this:

def do_foo(bar: list | None):
    if not bar:
        return
    ...

This one communicates to me that the function only makes sense with a non-empty list.

To this:

def do_foo(bar):
    if len(bar) == 0:
        return

This just tells me bar is something that has a length (list, dict, str, etc).

And this is way worse:

def do_foo(bar: list | None):
    if len(bar) == 0:
        return

This tells me we want an exception if bar is None, which I think is bad style, given that we're explicitly allowing None here. If we remove the | None and get an exception, than the code is broken because I shouldn't be able to get that value in that context.

If I care about the difference between None and empty, then I'll make that explicit:

if bar is None:
    ...
if not bar:
    ...

In any case, I just do not like if len(bar) == 0 because that looks like a mistake (i.e. did the dev know it could throw an error if it's not a list? Was that intentional?).