spylang/spy

Redshift should raise only StaticErrors

オープン

#410 opened on 2026/02/28

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)Python (60 件のフォーク)auto 404
help wanted

Repository metrics

Stars
 (803 個のスター)
PR merge metrics
 (PR metrics pending)

説明

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

コントリビューターガイド