1

エラーをキャッチすることは部分的に機能しません!

私がやりたいのは、ユーザーが実際の写真または偽造された写真(たとえば、名前が変更されたテキストファイル.jpegをアップロードしたかどうかを検出することです。

try:
    image = Image.open(StringIO.StringIO(buf=avat))
    type = image.format
    (x, y) = image.size
    print x, y
    if x < y:
        orientation = "portrait"
    else:
        orientation = "paysage" 
    pref = str(time.time())
    nomf = pref.replace(".", "") 
    nomfich = nomf+"."+type
    self.fs = GridFS(self.db)
    avatar_id = self.fs.put(avat, content_type=avctype, filename=nomfich)
except IOError, TypeError:
    self.redirect("/erreur-im")

これがに示されているtaceballですhttp://localhost:8000/erreur-im

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\tornado-2.3.post1-py2.7.egg\tornado\web.py", line 1023, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
  File "G:\Mon projet\sog-emouk\handlers.py", line 101, in get
    avctype = self.db.users.find_one()["avctype"]
TypeError: 'NoneType' object has no attribute '__getitem__'

ここで私がやりたかったのは、ユーザーをページにリダイレクトして、ユーザーが画像を使用する必要があることをユーザーに伝えることです。

結果に変更self.redirectself.write("please upload....")たときは奇妙でした:

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\tornado-2.3.post1-py2.7.egg\tornado\web.py", line 1023, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
  File "G:\Mon projet\sog-emouk\handlers.py", line 153, in post
    user={"pseudo":pseudo, "orientation":orientation, "avctype":avctype, "password":password, "email":email, "tel":tel, "commune":commune, "coord":coord, "statut":statut, "telf":telf, "avatar":avatar_id, "acheteur":[], "vendeur":[]}
UnboundLocalError: local variable 'orientation' referenced before assignment

したがって、例外をキャッチした後にコードを実行するため、self.redirectここでは奇妙なことがあると思います(実際、image.sizeはテキストファイルのために不明です)。`self.write

4

1 に答える 1

1

このトレースバックは、両方の場所でキャッチされていない例外をスローしているコードにリダイレクトしていることを示唆しています。これを参照してください:avctype = self.db.users.find_one()["avctype"]および

user={"pseudo":pseudo, "orientation":orientation, "avctype":avctype, "password":password, "email":email, "tel":tel, "commune":commune, "coord":coord, "statut":statut, "telf":telf, "avatar":avatar_id, "acheteur":[], "vendeur":[]}

両方のトレースバックを参照してください。

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\tornado-2.3.post1-py2.7.egg\tornado\web.py", line 1023, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
  File "G:\Mon projet\sog-emouk\handlers.py", line 101, in get
    avctype = self.db.users.find_one()["avctype"]
TypeError: 'NoneType' object has no attribute '__getitem__'

Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\tornado-2.3.post1-py2.7.egg\tornado\web.py", line 1023, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
  File "G:\Mon projet\sog-emouk\handlers.py", line 153, in post
    user={"pseudo":pseudo, "orientation":orientation, "avctype":avctype, "password":password, "email":email, "tel":tel, "commune":commune, "coord":coord, "statut":statut, "telf":telf, "avatar":avatar_id, "acheteur":[], "vendeur":[]}
UnboundLocalError: local variable 'orientation' referenced before assignment

したがって、アプリケーションとリクエストハンドラーを初期化しているアプリケーションにエラーがあると思います。

さらに 、ファイルが実際に jpeg であるかどうかを確認する方法も確認できます実際、最初の 4 文字をチェックすることで、avi、rm などの他のメディア ファイル形式をチェックできます。

于 2012-08-18T19:23:56.193 に答える