Ja, aber in der Diskriminantenberechnung ergibt sich die Wurzel aus der negativen reellen Zahl.
Zudem ist die Aussage: "eine Wurzel aus einer negativen Zahl existiert nicht" nur in dem reellen (und damit der Schulmathematik UND der Rechnerform) Körper der Zahlen richtig. Es gibt ja weiterhin noch die komplexen Zahlen. Aber das ist höhere Mathematik, imaginäre Mathematik
Also:
Definitionsbereich von der Wurzel (sqrt) ist x >= 0
Du kannst den Wert (p*p/4)-q einer Variable (_d) zuweisen. Dein D wäre dann sqrt(_d) - dann bräuchtest Du auch diesen Wert nicht mehr berechnen (da das Programm aber nicht zeitkritisch scheint, dürfte das kaum ins Gewicht fallen).
Wenn also _d < 0 wird, wird sqrt(_d) MIT SICHERHEIT die Exception auslösen.
Andernfalls kannst Du hier - wie erwähnt - auch mit try...except..end arbeiten, aber angesichts der Tatsache, dass Du hier die Exception durch simple Mathematik vermeiden kannst, brauchst Du diesen Konstrukt hier nicht.