2013-07-22 21 views
5

Robię grabber obrazu do usługi puush; jednak za każdym razem, gdy generuję losowy URL i próbuję go zweryfikować jako obraz .PNG, generowany jest błąd. Właśnie dzisiaj zacząłem używać języka Python, więc możesz powiedzieć, że jestem w tym nowy!Python, próbując uzyskać rozszerzenie pliku za pośrednictwem adresu URL

Błąd, który jest generowany:

Traceback (most recent call last): 
    File "run.py", line 19, in <module> 
    extension = guess_extension(guess_type(url)) 
    File "C:\Python33\lib\mimetypes.py", line 320, in guess_extension 
    return _db.guess_extension(type, strict) 
    File "C:\Python33\lib\mimetypes.py", line 189, in guess_extension 
    extensions = self.guess_all_extensions(type, strict) 
    File "C:\Python33\lib\mimetypes.py", line 168, in guess_all_extensions 
    type = type.lower() 
AttributeError: 'tuple' object has no attribute 'lower' 

Kod, który jest prowadzony:

#!/usr/bin/env python 
import sys 
import urllib 
from mimetypes import guess_type, guess_extension 
from random import choice 

randoms = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 
      'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',' J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; 

downloads = 1; 

#the number of files we want to download 
target = int(sys.argv[1]); 

while downloads <= target: 
    string = choice(randoms)+choice(randoms)+choice(randoms)+choice(randoms)+choice(randoms) 
    url = 'http://puu.sh/'+string 

    print(str(downloads)+': '+string) 

    #download 
    extension = guess_extension(guess_type(url)) 
    print(extension) 

    #urllib.request('http://puu.sh/'+string, string+'.png') 
    downloads += 1 

Wszelkie pomysły na to, co ten błąd próbuje mi powiedzieć? Dzięki.

Odpowiedz

6

guess_type() zwraca krotkę (type,encoding), natomiast guess_extension() przyjmuje pojedynczy argument type.

Linia

extension = guess_extension(guess_type(url)) 

połączenia guess_type a następnie przekazuje wartość powrotną (krotny) do guess_extension. należy przekazać tylko pierwszy element krotki (type)

extension = guess_extension(guess_type(url)[0]) 
1

Mogę zasugerować w przyszłości, kiedy napotykają problemy jak to, że print żadnych zmiennych, które daje smutek.

Tak więc w przypadku ciebie teraz, jeśli nie print (type) pyton dałby wam krotki i byś był w stanie sprawdzić, czy adres URL, gdzie poszukuje się tam i wtedy zrobić type = type[0].lower()

Powiązane problemy