Anlegen eines try-blocks erzwingen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
lunar

sparrow hat geschrieben:
ice2k3 hat geschrieben:Mal abgesehen davon kann man die Exception in Java genau so nach oben weiter reichen (mit dem Schlüsselwort throws), das Abfangen der Exception ist nicht Pflicht!
Auch das ist falsch.
In diesem Fall muss der Aufrufer dann die Fehlerbehandlung übernehmen oder weiterreichen. Ein "Unterschlagen" wie in Python ist somit nicht möglich, spätestens in der Main-Methode wird niemand auf die Idee kommen per throws weiter zu reichen.
Ich weiß nicht, wie man das in Java-Desktop-Programmen tut, weil ich das noch nie programmiert habe. In Java-Servlets jedenfalls ist es durchaus Usus, alle Ausnahmen, an denen man nicht interessiert ist, nach oben durchzureichen, weil der Applikationsserver dann einen sauberern Traceback fürs Debugging in die Log-Dateien schreibt und man nicht Gefahr läuft, mit einem inkonsistenten Zustand weiterzuarbeiten. Ich persönlich würde das auch bei Desktop-Programmen tun, da der Traceback im Falle einer ungewöhnlichen Ausnahme viel wichtiger ist als eine nichtssagende Fehlermeldung.

Meiner Erfahrung nach führt dieses Feature vor allem dazu, dass Ausnahmen an den unmöglichsten Stellen abgefangen und mit einem "System.out.println("Error occured: " + e.getMessage())" abgehandelt werden. Dabei geht der fürs Debugging essentielle Traceback verloren, und zudem läuft das Programm mitunter in einem völlig inkonsistenten Zustand weiter anstatt sauber zu terminieren.

Außerdem verhindert dieses Feature, dass man Dinge, die Ausnahmen werfen könnten, als Iterator implementiert. Die entsprechende Schnittstelle in Java wirft keine Ausnahmen, daher darf auch eine Implementierung keine Ausnahmen werfen. Einen Iterator zu implementieren, der "for (String line: file)" in Java ermöglicht, ist deswegen völlig unsinnigerweise unmöglich.

Meiner persönlichen Erfahrung nach verringert dieses Feature die Qualität von Java-Programmen meist eher, da die meisten Programmierer einfach eine generische Ausnahmeklausel schreiben, die alles abfängt und alle Debugging-Informationen verschluckt. Außerdem funktioniert es in anderen statischen Sprachen wie C# oder C++ ja auch ohne.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

sparrow hat geschrieben:Dadurch wird die Sicherheit aber nicht scheinbar, denn eine NullPointerException kann nur auftreten wenn auf Objekt verwiesen und zugegriffen wird das null ist.
Was ist denn daran nicht scheinbar? Der naive Betrachter mag doch annehmen, dass keine Exception fliegen kann eben weil man nichts abfangen muss. Das Problem sind in dem Fall aber auch nicht die NullPointerExceptions sondern die Tatsache, dass das Objekt überhaupt Null sein darf. Und das 1/0 gleich eine RuntimeException wirft, sollte wirklich nicht im Sinne des Erfinders sein.
Meine Frage war ob man das Behandeln von Exceptions in Python erzwingen kann. Diese Frage beantwortet man nicht mit Halbwahrheiten über andere Programmiersprachen.
Jetzt sei nicht beleidigt. Wenn du ein Verhalten „wie in Java“ möchtest musst du dich auch nicht wundern wenn man über Java spricht. Und Halbwahrheiten über Java wurden hier auch nicht verbreitet. Deine Frage wurde auch mehrfach beantwortet: Geht nicht ohne weiteres. Deine Zeit investierst du auf jeden Fall besser in das schreiben von Tests.
Antworten