spylang/spy

Redshift should raise only StaticErrors

Offen

#410 geöffnet am 28.02.2026

 (0 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)Python (60 Forks)auto 404
help wanted

Repository-Metriken

Stars
 (803 Sterne)
PR-Merge-Metriken
 (PR-Metriken ausstehend)

Beschreibung

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

Contributor Guide