spylang/spy

Redshift should raise only StaticErrors

Aperta

#410 aperta il 28 feb 2026

 (0 commenti) (0 reazioni) (0 assegnatari)Python (60 fork)auto 404
help wanted

Metriche repository

Star
 (803 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

The following code raises an exception during redshift, but it shouldn't:

def main() -> None:
    if False:
        1 / 0
❯ spy rs /tmp/t.spy 
Static error during redshift:
Traceback (most recent call last):
  * [redshift] t::main at /tmp/t.spy:3
  |         1 / 0
  |         |___|

ZeroDivisionError: division by zero

On the other hand, this code should continue to raise TypeError eagarly during redshift:

def main() -> None:
    if False:
        1 + "hello"

The difference between the two cases is that TypeError is a subclass of StaticError, while ZeroDivisionError is not.

If a non-StaticError is raised during redshift, it should be turned into the equivalent raise stmt. In other words, non-StaticError should always behave as if the error mode is set to lazy.

The piece of code responsible for that is here: https://github.com/spylang/spy/blob/3eafa094be3781e54e1e0852c644b6ff94233c27/spy/doppler.py#L139-L149

Guida contributor