spylang/spy

Redshift should raise only StaticErrors

開放

#410 建立於 2026年2月28日

 (0 則留言) (0 個反應) (0 位負責人)Python (60 個分叉)auto 404
help wanted

倉庫指標

星標
 (803 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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

貢獻者指南