<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">(Noch mal, vorhin habe ich mit dem falschen Absender gepostet, da blieb die Mail in der Moderatorschleife hängen.)<br><br>Am 14.03.2011 um 14:20 schrieb Daniel Hepper:<br><blockquote type="cite"><br></blockquote><blockquote type="cite">Ich würde ausserdem nicht bei jeder Response explizit success = true<br></blockquote><blockquote type="cite">zurück geben. Statt dessen könntest du im Fehlerfall (status != 200)<br></blockquote><blockquote type="cite">eine aussagekräftige Exception werfen, z.B. bei status 404 eine<br></blockquote><blockquote type="cite">ActionNotSupportedException. Momentan geht die Information warum etwas<br></blockquote><blockquote type="cite">nicht funktioniert hat, verloren.<br></blockquote><br>Ich wollte gerade was Ähnliches schreiben. Viele Methoden haben etwa folgende Struktur:<br><br> def some_method(self):<br> url = "<a href="http://api.imgur.com/irgend/eine/url">http://api.imgur.com/irgend/eine/url</a>"<br> method = 'METHODE'<br> resp, xxxx = self.client.request(url, method)<br> if resp['status'] == '200':<br> return {'success': True, 'result': xxxx}<br> else:<br> return {'success': False, 'result': xxxx}<br><br>Vorschlag:<br>Du schreibst eine helper-Methode:<br><br> def _submit_request(self, url, method):<br> resp, result = self.client.request(url, method)<br> if resp['status'] == '404':<br> raise My404Exception<br> if resp['status'] == '403':<br> raise My403Exception<br> # and so on<br> if resp['status'] != '200':<br> raise MyOtherException<br> return result<br><br>Dann werden die anderen Methoden viel kürzer (DRY!):<br><br> def some_method(self):<br> return self._submit_request("<a href="http://api.imgur.com/irgend/eine/url">http://api.imgur.com/irgend/eine/url</a>", 'METHODE')<br><br>Der Aufrufer bekommt nur das Ergebnis geliefert und im Fehlerfall eine sinnvolle Exception. Und Du hast weniger Code.<br><br><blockquote type="cite">Das ist einiges an Arbeit, aber ich damit wäre die Bibliothek für<br></blockquote><blockquote type="cite">einen Benutzer noch einfacher zu verwenden und wie ich finde noch<br></blockquote><blockquote type="cite">"pythonischer". Was meinen die Anderen dazu?<br></blockquote><br>Genau!<br><br>Noch pythonischer wäre vielleicht:<br><br> def _submit_request(self, url, method):<br> exceptions = {'404': My404Exception, '403': My403Exception}<br> resp, result = self.client.request(url, method)<br> if resp['status'] in exceptions:<br> raise exceptions[resp['status']]<br> if resp['status'] != '200':<br> raise MyOtherException<br> return result<br><br>Gruß, Johannes<br><br>(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.)<br><div><br></div></body></html>