[HN Gopher] Raising exceptions or returning error objects in Python
___________________________________________________________________
Raising exceptions or returning error objects in Python
Author : EntICOnc
Score : 10 points
Date : 2022-06-09 06:40 UTC (16 hours ago)
(HTM) web link (lukeplant.me.uk)
(TXT) w3m dump (lukeplant.me.uk)
| Zababa wrote:
| Interesting, I've seen the same discussion but applied to OCaml
| and with an option type vs an exception. For example, the module
| List has both List.nth that raises Failure if the list is too
| short, and List.nth_opt that returns None of the list is too
| short. One aspect that I've seen mentioned about OCaml and not
| with this article is performance. An option will trigger an
| allocation, and will generay be slower than an exception. One the
| other hand, the option approach is safer. I'm not sure if that's
| true with Python too though.
| g_delgado14 wrote:
| Performance cost is a legitimate concern but one that should be
| considered in relative terms.
|
| e.g. yes there are more allocations, but in what context is the
| code being used? Are we building gigabyte-scale real-time
| systems? no? ok then let's maybe not worry about performance
| right now and instead optimize for intuition, maintainability
| and readability. Obviously while at the same time monitoring
| CPU and memory consumption of our applications to help us
| determine when we might want to look to optimize our code.
| g_delgado14 wrote:
| Yessss... I'm a big advocate of using error objects rather than
| throwing exceptions. I think the industry over-uses throwing
| exceptions and it's basically turned into the new GOTO statement.
|
| I wrote an article about this as well but for TypeScript [0] and
| I've got a relatively popular npm package that does what I
| mention in the article [1]
|
| ---
|
| [0] - https://gdelgado.ca/type-safe-error-handling-in-
| typescript.h...
|
| [1] - https://www.npmjs.com/package/neverthrow
| hlpweg wrote:
| Python front page lecture #671729.
___________________________________________________________________
(page generated 2022-06-09 23:00 UTC)