pyflakes eingebunden — zwei echte Fehler in core/trader.py gefunden
Auf die Frage nach einem Lint-Modul: pyflakes installiert und als Stufe A2 in tools/check_nfalle.py eingebunden. py_compile prueft nur die SYNTAX; ein Tippfehler in einem NAMEN ist syntaktisch einwandfrei — und dieses Projekt hat sehr viele breite except-Exception-Bloecke, in denen ein NameError unsichtbar bleibt. Beim ERSTEN Lauf zwei echte Fehler, beide in core/trader.py, beide nutzten log. (den Namen gibt es dort nicht, nur log_trade/log_hist): · _broker_offset_s(): der NameError lief in das except-pass UND nahm die darunter stehende Zuweisung self._boff = int(off) mit -> ein echter Broker-Zeitzonen-Wechsel waere nie uebernommen worden, dauerhaft und lautlos. Ausgerechnet der Zweig, der als Deployment-Drift Fall 4 gebaut wurde (falscher Offset -> Time-Stop-Alter negativ). · modify_sltp(): steht NICHT in einem try -> der Fehler lief bis in /api/sltp. Der Broker hatte SL/TP bereits geaendert, der User bekam trotzdem eine Fehlermeldung, und set_sltp kam nie bis trail.deactivate() — das Trailing blieb an und haette die Handeingabe zurueckgezogen. Seit dem Initial-Commit drin. Beide behoben (log_trade). Zusaetzlich die Annotation 'HistoryLogger | None' ueber if TYPE_CHECKING sauber importiert (String-Annotation, kein Laufzeit-Import, kein Zirkel). Projektweit jetzt 0 undefinierte Namen. Schweregrad-Trennung ist Absicht: nur undefined name / syntax error werden gemeldet, die ~105 kosmetischen Hinweise unterdrueckt. Auch 'redefinition of unused' bleibt draussen — es trifft das legitime Muster hook = None + bedingtes def hook (in zwei Backtests geprueft, beide korrekt). Eine Pruefung mit Dauer-Treffern wird ignoriert, und mit ihr die eine echte. Backtest-Dateien nicht angefasst (Zahlen). Neustart verifiziert, Log sauber. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
394786b312
commit
e69907edbe
@@ -53,6 +53,60 @@ for p in dateien(".py"):
|
||||
print(f" {npy} Dateien geprueft.")
|
||||
|
||||
|
||||
# ── A2) pyflakes: was py_compile NICHT sieht ─────────────────────────────
|
||||
# ⚠⚠ WARUM DIESE STUFE NOETIG IST. `py_compile` prueft nur die SYNTAX. Ein
|
||||
# Tippfehler in einem Namen ist syntaktisch einwandfrei und fliegt erst zur
|
||||
# Laufzeit — und dieses Projekt hat sehr viele breite `except Exception`-Bloecke
|
||||
# (bewusst, als Fail-safe im Trading-Betrieb). Ein `NameError` darin ist damit
|
||||
# UNSICHTBAR: keine Meldung, kein Logeintrag, nur ein Zweig, der nichts tut.
|
||||
# Real gefunden beim ERSTEN Lauf ueberhaupt (2026-08-07):
|
||||
# · `core/trader.py` nutzte zweimal `log.` — den Namen gibt es dort nicht
|
||||
# (nur `log_trade`/`log_hist`). Einer davon seit dem Initial-Commit.
|
||||
# · Folge 1 (`_broker_offset_s`): der NameError lief in ein `except: pass`
|
||||
# und nahm die Zuweisung `self._boff = int(off)` mit → ein echter
|
||||
# Broker-Zeitzonen-Wechsel waere nie uebernommen worden.
|
||||
# · Folge 2 (`modify_sltp`): kein try drumherum → der Fehler lief bis in
|
||||
# `/api/sltp`; der Broker hatte SL/TP schon geaendert, der User bekam
|
||||
# trotzdem einen Fehler, und `trail.deactivate()` wurde uebersprungen.
|
||||
# GETRENNT NACH SCHWEREGRAD: eine Pruefung, die dauerhaft 100 harmlose Zeilen
|
||||
# ausgibt, wird ignoriert — und dann auch die eine wichtige.
|
||||
# ⚠ `redefinition of unused` steht BEWUSST NICHT hier drin. pyflakes meldet damit
|
||||
# auch das voellig legitime Muster `hook = None` gefolgt von einem bedingten
|
||||
# `def hook(...)` — real in `backtest_flipclose2.py` und
|
||||
# `backtest_adverse15_squeeze.py`, beide geprueft und korrekt. Zwei unvermeidbare
|
||||
# Dauer-Treffer sind genau der Weg, auf dem eine Pruefung ignoriert wird, und mit
|
||||
# ihr dann auch die eine echte Meldung. Wer die Klasse doch sehen will, ruft
|
||||
# `python -m pyflakes <datei>` direkt auf.
|
||||
SCHWER = ("undefined name", "undefined local", "syntax error")
|
||||
print()
|
||||
print("=" * 88)
|
||||
print(" A2) PYFLAKES — undefinierte Namen (was py_compile nicht sieht)")
|
||||
print("=" * 88)
|
||||
try:
|
||||
import io
|
||||
|
||||
from pyflakes.api import checkPath
|
||||
from pyflakes.reporter import Reporter
|
||||
|
||||
aus, err = io.StringIO(), io.StringIO()
|
||||
rep = Reporter(aus, err)
|
||||
for p in dateien(".py"):
|
||||
checkPath(str(p), rep)
|
||||
zeilen = [z for z in (aus.getvalue() + err.getvalue()).splitlines() if z.strip()]
|
||||
schwer = [z for z in zeilen if any(s in z for s in SCHWER)]
|
||||
for z in schwer:
|
||||
kurz = z.replace(str(WURZEL) + "\\", "").replace(str(WURZEL) + "/", "")
|
||||
befunde.append(f"PF {kurz}")
|
||||
print(f" FEHLER {kurz}")
|
||||
if not schwer:
|
||||
print(" keine undefinierten Namen.")
|
||||
print(f" ({len(zeilen) - len(schwer)} kosmetische Hinweise unterdrueckt — "
|
||||
f"ungenutzte Importe, f-Strings ohne Platzhalter)")
|
||||
except ImportError:
|
||||
print(" ⚠ pyflakes nicht installiert — Stufe uebersprungen.")
|
||||
print(" Installation: python -m pip install pyflakes")
|
||||
|
||||
|
||||
# ── B) JavaScript ────────────────────────────────────────────────────────
|
||||
def js_offene_strings(text: str):
|
||||
"""Zeilen mit angefangenem, nicht geschlossenem ' oder " (Template-Literale
|
||||
|
||||
Reference in New Issue
Block a user