[python-users] Fwd: Etwas Hilfe zur Still, Code-Übersichtlichkeit und Verbesserungen
Johannes Ammon
j.ammon at terminnetz.de
Mo Mär 14 17:23:14 CET 2011
(Noch mal, vorhin habe ich mit dem falschen Absender gepostet, da blieb die Mail in der Moderatorschleife hängen.)
Am 14.03.2011 um 14:20 schrieb Daniel Hepper:
>
> Ich würde ausserdem nicht bei jeder Response explizit success = true
> zurück geben. Statt dessen könntest du im Fehlerfall (status != 200)
> eine aussagekräftige Exception werfen, z.B. bei status 404 eine
> ActionNotSupportedException. Momentan geht die Information warum etwas
> nicht funktioniert hat, verloren.
Ich wollte gerade was Ähnliches schreiben. Viele Methoden haben etwa folgende Struktur:
def some_method(self):
url = "http://api.imgur.com/irgend/eine/url"
method = 'METHODE'
resp, xxxx = self.client.request(url, method)
if resp['status'] == '200':
return {'success': True, 'result': xxxx}
else:
return {'success': False, 'result': xxxx}
Vorschlag:
Du schreibst eine helper-Methode:
def _submit_request(self, url, method):
resp, result = self.client.request(url, method)
if resp['status'] == '404':
raise My404Exception
if resp['status'] == '403':
raise My403Exception
# and so on
if resp['status'] != '200':
raise MyOtherException
return result
Dann werden die anderen Methoden viel kürzer (DRY!):
def some_method(self):
return self._submit_request("http://api.imgur.com/irgend/eine/url", 'METHODE')
Der Aufrufer bekommt nur das Ergebnis geliefert und im Fehlerfall eine sinnvolle Exception. Und Du hast weniger Code.
> Das ist einiges an Arbeit, aber ich damit wäre die Bibliothek für
> einen Benutzer noch einfacher zu verwenden und wie ich finde noch
> "pythonischer". Was meinen die Anderen dazu?
Genau!
Noch pythonischer wäre vielleicht:
def _submit_request(self, url, method):
exceptions = {'404': My404Exception, '403': My403Exception}
resp, result = self.client.request(url, method)
if resp['status'] in exceptions:
raise exceptions[resp['status']]
if resp['status'] != '200':
raise MyOtherException
return result
Gruß, Johannes
(Zu meiner Person: ich lese hier schon eine Weile passiv mit. Ich bin im Hauptberuf kein Programmierer, programmiere aber schon lange, seit ein paar Jahren mit Python. Jetzt habe ich sogar ein Django-Projekt, mit dem ich Geld verdienen will. Wenn ich es zeitlich mal schaffe, komme ich auch zu pycologne. PythonCamp hab ich mir vorgenommen.)
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.uni-koeln.de/pipermail/python-users/attachments/20110314/3d256eaa/attachment.html>
Mehr Informationen über die Mailingliste python-users