<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>