Error handling regarding dimension mismatch: Using invalid_arg?

I have heard (or felt) that paradigm change before (in various contexts, not just OCaml), and I am curious if everyone sees it that way or if there is some reading material / references to read about that paradigm shift?

Also mentioned in the other thread:

Is this OCaml specific? Do we see a similar motion in other programming languages? I do know that Rust generally refrains from unwinding the stack (or catching an unwind, even though it’s possible) but rather proposes using a Result type (or also ControlFlow).

Is this related to exceptions not being declared in OCaml, hence being more dangerous than using option or result?

In Python, functions like float result in a ValueError rather than None:

>>> float("many")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'many'

In OCaml, I have seen both, and sometimes functions come in two flavors (at least in Stdlib).

I think using Failure can make things easier in some contexts when you have several places where things can “fail” and you just want to sum up all of them and report them as a failure in the end (using a single try … with without writing match statements for each function call). But I also felt more drawn to options.