271
submitted 8 months ago by neme@lemm.ee to c/python@programming.dev
you are viewing a single comment's thread
view the rest of the comments
[-] bjornsno@lemm.ee 65 points 8 months ago

I code both typescript and python professionally, and python is almost as much of a mess, just a different kind of mess. The package manager ecosystem is all over the place, nobody is agreeing on a build system, and the type system is still unable to represent fairly simple concepts when it comes to function typing. Also tons of libraries just ignore types altogether. I love it, but as a competitor to JavaScript in the messiness department it's not a good horse.

[-] legion02@lemmy.world 15 points 8 months ago* (last edited 8 months ago)

They ignore types all together because typing is optional in python.

[-] bjornsno@lemm.ee 13 points 8 months ago

All documentation is optional and ignored at runtime, that doesn't mean you shouldn't do it. If your library doesn't have type hints I'm just not gonna use it, I don't have the time to figure out what you accept or return.

[-] legion02@lemmy.world -2 points 8 months ago

It means they have the option to do it or not do it and you have the option to not use it, which clearly your exercising. I've personally never had a situation where a lack of type hints slowed me down even a little.

[-] FizzyOrange@programming.dev 6 points 8 months ago

I dunno if you're being deliberately obtuse, but just in case you really did miss his point: the fact that type hints are optional (and not especially popular) means many libraries don't have them. It's much more painful to use a library without type hints because you lose all of their many benefits.

This obviously isn't a problem in languages that require static types (Go, Rust, Java, etc..) and it isn't a problem with Typescript because static types are far more popular in JavaScript/Typescript land so it's fairly rare to run into a library that doesn't have them.

And yeah you can just not use the library at all but that's just ignoring the problem.

[-] namingthingsiseasy@programming.dev 1 points 8 months ago

True, but if you're looking at a Python library that doesn't have type hints in 2024, then chances are that it's not very good and/or not very well maintained.

[-] FizzyOrange@programming.dev 1 points 8 months ago

Well, indeed. Unfortunately there are still a fair number of them. The situation is definitely improving at least.

[-] eager_eagle@lemmy.world 3 points 8 months ago

types are always ignored at runtime, they're only useful when developing

[-] bjornsno@lemm.ee 6 points 8 months ago

Yeah, they're useful when developing, which is why it's so frustrating when libraries don't implement types. I'm developing and I'm trying to use a tool that supposedly fits a use case I have, but the tool didn't come with instructions so it's practically useless to me. I could open the tool up and look at its guts to figure it out but are you kidding me no, I'm not going back to the stone age for your tool.

[-] eager_eagle@lemmy.world 3 points 8 months ago* (last edited 8 months ago)

basically sums up the opencv experience in Python.

great lib, very mediocre Python wrapper.

[-] NostraDavid@programming.dev 1 points 8 months ago

Check if there's a stub or types extension - https://pypi.org/search/?q=types

[-] dallen@programming.dev 1 points 8 months ago

Pydantic offers awesome runtime validation (using Rust).

[-] jjjalljs@ttrpg.network 2 points 8 months ago

the type system is still unable to represent fairly simple concepts when it comes to function typing

what do you mean by this?

[-] bjornsno@lemm.ee 1 points 8 months ago

My biggest pet peeve is the complete inability to annotate a set of known exceptions that a function raises in a machine readable way. The discussion about it is quite heated.

[-] FizzyOrange@programming.dev 4 points 8 months ago

In fairness that approach hasn't really worked in other languages. It was so unpopular in C++ that they actually removed the feature, which is almost unheard of. Java supports it too but it's pretty rarely used in my experience. The only place I've seen it used is in Android. It's unpopular enough there that Kotlin doesn't support it.

[-] jjjalljs@ttrpg.network 3 points 8 months ago

Interesting. I've never felt a need for this, and as the other reply here said it was really unpopular in other languages.

I would have guessed you would have said something about how it's annoying to type callable arguments, and how Protocol exists but doesn't seem that widely known.

[-] bjornsno@lemm.ee 1 points 8 months ago* (last edited 8 months ago)

Definitely those used to be pain points, but they do exist now so type erasure after decorator application isn't a problem anymore, which used to be another huge one for me.

The discussion around how unpopular it was in other languages seems like such an obvious side track to me. Typing in general went out of fashion and then made a comeback when it was opt-in, why wouldn't the same apply to exceptions? Of course I'm not wanting warnings in every func call because of a potential MemoryCorruptionError, but if a library has some set of known exceptions as a de facto part of its interface then that's currently completely unknown to me and my static type checker.

One kinda bad example is playwright. Almost all playwright functions have the chance to raise a TimeoutError, but even if you know this you'll probably shoot yourself in the foot at least once because it's not the built-in TimeoutError, oh no, it's a custom implementation from the library. If you try to simply try...except TimeoutError:, the exception will blow right by you and crash your script, you've got to import the correct TimeoutError. If it was properly typed then pyright would be able to warn you that you still need to catch the other kind of TimeoutError. It's a bad example because like I said almost all playwright functions can raise this error so you'd get a lot of warnings, but it also demonstrates well the hidden interface problem we have right now, and it's the most recent one that screwed me, so it's the one I remember off the top of my head.

this post was submitted on 02 Nov 2024
271 points (98.2% liked)

Python

7306 readers
4 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