Sorl-thumbnail: Fehler bei Thumbnail-Tag fehlgeschlagen liefert keine Details

Erstellt am 28. Juli 2016  ·  7Kommentare  ·  Quelle: jazzband/sorl-thumbnail

Gelegentlich erhalte ich Fehler wie diesen, aber sie liefern keinen Kontext dazu, welches Bild fehlgeschlagen ist, was das Debuggen erschwert, wenn sie gelegentlich auf einem ausgelasteten Webserver auftauchen. Ich weiß nicht, warum dies nicht aufgenommen worden wäre, es sei denn, in diesem Wrapper waren Details (wie der Dateiname) nicht verfügbar?

[ERROR] Thumbnail tag failed  [thumbnail:84] 
Traceback (most recent call last): 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/templatetags/thumbnail.py", line 59, in render 
    return self._render(context) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/templatetags/thumbnail.py", line 137, in _render 
    thumbnail = get_thumbnail(file_, geometry, **options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/shortcuts.py", line 8, in get_thumbnail 
    return default.backend.get_thumbnail(file_, geometry_string, **options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/base.py", line 125, in get_thumbnail 
    thumbnail) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/base.py", line 157, in _create_thumbnail 
    image = default.engine.create(source_image, geometry, options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/base.py", line 20, in create 
    image = self.orientation(image, geometry, options) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/base.py", line 45, in orientation 
    return self._orientation(image) 
  File "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/pil_engine.py", line 71, in _orientation 
    exif = image._getexif() 
  File "/app/.heroku/python/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", line 390, in _getexif 
    return _getexif(self) 
  File "/app/.heroku/python/lib/python2.7/site-packages/PIL/JpegImagePlugin.py", line 418, in _getexif 
    info = TiffImagePlugin.ImageFileDirectory(head) 
  File "/app/.heroku/python/lib/python2.7/site-packages/PIL/TiffImagePlugin.py", line 274, in __init__ 
    raise SyntaxError("not a TIFF IFD") 

Alle 7 Kommentare

Für jeden, der diese Fehlermeldung findet, habe ich auch einen Fehler bei Pillow mit diesem Fehler beim Abrufen von EXIF ​​gemeldet:

https://github.com/python-pillow/Pillow/issues/2043

@mariocesar Kannst du hier eine Lösung empfehlen? Einige Benutzer laden Bilder auf meine Website hoch, die irgendwie beschädigt sind, und anschließend wird diese Fehlerprotokollierung ständig angezeigt.

  1. Ich möchte mehr Informationen wie den Dateinamen, damit ich das Problem diagnostizieren kann. So wie es ist, ist es ein Durcheinander herauszufinden, was schief gelaufen ist.
  2. Zweitens möchte ich in der Lage sein, das Problem über eine Ausnahme zu erkennen. Aus diesem Grund sollte ich einen Aufruf auf niedrigerer Ebene ausführen, der mir tatsächlich einen Fehlerergebniswert oder eine Ausnahme geben würde.

@mariocesar Bitte.

Ja, bitte! =D

Das Problem war in der Tat ein Fehler im Wasserzeichenprogramm, das diese Benutzer verwendeten, was zu einem beschädigten EXIF ​​führte, und ich arbeitete mit dem Autor zusammen, um das zu beheben.

Die Art und Weise, wie ich dieses Problem gelöst habe, bestand darin, diese Daumen immer im Code (und nicht in der Vorlage) zu generieren und in einen try-Block einzuschließen. Darüber hinaus habe ich einen periodischen Prozess, der versucht, die Daumen zu generieren, anstatt während des Anforderungszyklus. Wenn es ein Problem mit dem Bild gibt, protokolliere ich es mit den erforderlichen Informationen und entferne das Bild, damit der Fehler nicht weiter auftritt.

    def get_thumbnail(self, dims, upscale=False, **options):
        """ Use sorl to produce the thumbnail; this also caches it for later.
        """
        from sorl.thumbnail import get_thumbnail as sorl_get_thumbnail
        try:
            return sorl_get_thumbnail(self.best_image(), dims, upscale=upscale, **options)
        except SyntaxError:
            # Only catch SyntaxError: not a tiff, otherwise, I had Heroku rebooting
            # and caused me to remove a good image.
            log.error("Problem generating thumbnail for #%s @ %s. Removed it. %s",
                    self.id, dims, self.best_image().url, exc_info=True)
            # Remove all images.
            self.image = ""
            self.save()
            return None

Datei "/app/.heroku/python/lib/python2.7/site-packages/sorl/thumbnail/engines/pil_engine.py", Zeile 71, in _orientation
exif = image._getexif()

`` Python

def _orientation(self, image):
        try:
            exif = image._getexif()
        except (AttributeError, IOError, KeyError, IndexError):
            exif = None

        if exif:
            orientation = exif.get(0x0112)

            if orientation == 2:
                image = image.transpose(Image.FLIP_LEFT_RIGHT)
            elif orientation == 3:
                image = image.rotate(180)
            elif orientation == 4:
                image = image.transpose(Image.FLIP_TOP_BOTTOM)
            elif orientation == 5:
                image = image.rotate(-90).transpose(Image.FLIP_LEFT_RIGHT)
            elif orientation == 6:
                image = image.rotate(-90)
            elif orientation == 7:
                image = image.rotate(90).transpose(Image.FLIP_LEFT_RIGHT)
            elif orientation == 8:
                image = image.rotate(90)

        return image

warum außer (AttributeError, IOError, KeyError, IndexError) ?
wir haben einen SyntaxError("not a TIFF IFD") , nicht in der Fehlerliste, das ist der Fehler.
warum nicht einfach ausnahme ??
wenn Exif nicht erhalten werden konnte, einfach ignorieren, weitermachen.

Alles klar, sie haben den Fehler bereits beseitigt.

    def _orientation(self, image):
        try:
            exif = image._getexif()
        except:
            exif = None
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen