fix(shadow): build_price_getter 兜底自崩根治——df 预绑 None。09-14 shadow_57 002646 连刷 356+ 次「free variable 'df' referenced before assignment in enclosing scope」:日线 get_price 抛异常时,except 兜底里列表推导式引用 try 内才赋值的 df(推导式独立作用域→df 成闭包 cell→cell 未赋值→NameError 逃逸到 broker 取价失败,兜底在自己最该兜的场反崩);修=try 前一行 df=None 预绑,get_price 抛异常时兜底走 df is not None=False→返 None 语义不变;TDD 先红后绿(本地精确复现同款 NameError),33 测全绿 [vps]
This commit is contained in:
@@ -71,6 +71,7 @@ def build_price_getter(provider: Any) -> Any:
|
||||
pass
|
||||
end = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
start = (datetime.now() - timedelta(days=10)).strftime("%Y-%m-%d")
|
||||
df = None # 预绑:get_price 抛异常时 except 兜底的推导式引用 df(闭包 cell)
|
||||
try:
|
||||
df = provider.get_price(
|
||||
security=security, start_date=start, end_date=end,
|
||||
|
||||
@@ -55,3 +55,18 @@ class TestBuildPriceGetter:
|
||||
p = SimpleNamespace(get_price=_StubProvider(close=22.35).get_price)
|
||||
getter = build_price_getter(p)
|
||||
assert getter("001234.XSHE") == 22.35
|
||||
|
||||
def test_daily_get_price_raising_returns_none(self):
|
||||
"""日线 get_price 本身抛异常 → 返 None,兜底不得自崩成 NameError。
|
||||
|
||||
09-14 shadow_57 实锤(002646 连刷 356+):except 兜底里的列表推导式
|
||||
引用 try 内才赋值的 df——推导式独立作用域使 df 成闭包 cell,get_price
|
||||
抛异常时 cell 未赋值 → ``free variable 'df' referenced before
|
||||
assignment in enclosing scope`` 逃逸到 broker 取价失败。
|
||||
"""
|
||||
|
||||
def _raise_get_price(**_):
|
||||
raise RuntimeError("rpc timeout")
|
||||
|
||||
getter = build_price_getter(SimpleNamespace(get_price=_raise_get_price))
|
||||
assert getter("002646.XSHE") is None
|
||||
|
||||
Reference in New Issue
Block a user