Ce face sys.displayhook și sys.breakpointhook
În consola interactivă, după fiecare expresie, Python apelează sys.displayhook(valoare), care afișează repr(valoare) (dacă nu este None) și o salvează în variabila _. O poți înlocui, de exemplu pentru afișare formatată.
breakpoint() apelează sys.breakpointhook(), care implicit pornește pdb (sau ce indică variabila PYTHONBREAKPOINT). Înlocuind-o, poți porni alt depanator sau dezactiva punctele de oprire.
Exemple
Exemplul 1: Funcții proprii
import sys, builtins
sys.displayhook([1, 2])
print(builtins._)
def afisare_frumoasa(valoare):
if valoare is not None:
print(f"=> {valoare!r} ({type(valoare).__name__})")
sys.displayhook = afisare_frumoasa
sys.displayhook(3.5)
sys.breakpointhook = lambda *a, **k: print("breakpoint ignorat", a, k)
breakpoint("x", motiv="test")
Rezultat
[1, 2]
[1, 2]
=> 3.5 (float)
breakpoint ignorat ('x',) {'motiv': 'test'}
Greșeli frecvente
- Înlocuiești
displayhookși te aștepți să schimbe ce afișeazăprint. Afectează doar rezultatele expresiilor din consola interactivă.
Comenzi înrudite
breakpoint(): Oprește programul în acel punct și pornește depanatorul (pdb), ca să inspectezi variabilele.sys.exception(), exc_info(), excepthook și unraisablehook: Excepția tratată în prezent și funcțiile care se ocupă de erorile neprinse.repr() și ascii(): Returnează reprezentarea „tehnică” a unei valori, utilă la depanare; ascii() o face doar cu caractere ASCII.