2017-09-09 11 views
0

Pythonで一般的なモジュール/関数(getimageinfo.py)と思われるエラーが発生しました。画像サイズをダウンロードせずに取得したいただし、次のエラーに実行している:Python getimageinfo.py:UnboundLocalError:割り当て前にローカル変数 'w'が参照されています

エラーコードのこのセクションから来ているようだ
>>> import getimageinfo 
>>> import urllib2 
>>> imgdata = urllib2.urlopen('https://cdn.programiz.com/sites/tutorial2program/files/python-modules.jpg') 
>>> image_type,width,height = getimageinfo.getImageInfo(imgdata) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "getimageinfo.py", line 61, in getImageInfo 
    width = int(w) 
UnboundLocalError: local variable 'w' referenced before assignment 
>>> 

# handle JPEGs 
elif (size >= 2) and data.startswith('\377\330'): 
    content_type = 'image/jpeg' 
    jpeg = StringIO.StringIO(data) 
    jpeg.read(2) 
    b = jpeg.read(1) 
    try: 
     while (b and ord(b) != 0xDA): 
      while (ord(b) != 0xFF): b = jpeg.read(1) 
      while (ord(b) == 0xFF): b = jpeg.read(1) 
      if (ord(b) >= 0xC0 and ord(b) <= 0xC3): 
       jpeg.read(3) 
       h, w = struct.unpack(">HH", jpeg.read(4)) 
       break 
      else: 
       jpeg.read(int(struct.unpack(">H", jpeg.read(2))[0])-2) 
      b = jpeg.read(1) 
     width = int(w) 
     height = int(h) 
    except struct.error: 
     pass 
    except ValueError: 
     pass 
他の誰もいない(少なくともモジュールのため、このエラーに直面しているように見えるん

1つはStackoverflowまたは他のフォーラムで報告されています)。どうすれば修正できますか?私は「もし」ステートメントの外

   h, w = struct.unpack(">HH", jpeg.read(4)) 

行を取得したいが、それはイメージが奇妙な性質を持っている場合にどのように影響するかひどく知りません。 (コーディングに新)

答えて

0

条件(ord(b) >= 0xC0 and ord(b) <= 0xC3)Falseある場合はwのデフォルトを宣言していない、あなたはそれを[OK]を

while (b and ord(b) != 0xDA): 
     while (ord(b) != 0xFF): b = jpeg.read(1) 
     while (ord(b) == 0xFF): b = jpeg.read(1) 
     # HERE YOU NEED SET VALUE for w and h 
     if (ord(b) >= 0xC0 and ord(b) <= 0xC3): 
      jpeg.read(3) 
      h, w = struct.unpack(">HH", jpeg.read(4)) 
      break 
     else: 
      # Or HERE YOU NEED SET VALUE for w and h 
      jpeg.read(int(struct.unpack(">H", jpeg.read(2))[0])-2) 
     b = jpeg.read(1) 
    width = int(w) 
    height = int(h) 
+0

を行うことができたとき、私は2つのコメント行を追加します。しかし、私はそれを初期化する必要があるかどうかを判断する必要があります。なぜなら、その1行をそのままコピーすると意図しない結果が生じるからです。 Else節が、著者が予想していたよりもはるかに多く行使されているように見えます。 – Samit

関連する問題