2016-04-18 8 views
1

Я использую Twython, чтобы сделать бота, который отправляет случайное изображение из папки, вот код!используя случайные фотографии с Twython

from twython import Twython 
import glob 
import random 

app_key = "XXX" 
app_secret = "XXX" 
oauth_token = "XXX" 
oauth_token_secret = "XXX" 
twitter = Twython(app_key, app_secret, oauth_token, oauth_token_secret) 

def RandomImageTwitt(folder): 
     #Takes the folder where your images are as input 
     images = glob.glob(folder + "*") 
     image_open = open(images[random.randint(0,len(images))-1]) 
     #Tweeting 
     image_ids = twitter.upload_media(media=image_open) 
     twitter.update_status(status='hello this is a status', media_ids=image_ids['media_id']) 

RandomImageTwitt("/home/Pi/Bots/Pictures/") 

Хорошо, и когда я использую питона script.py, то вернуть эту ошибку:

Traceback (most recent call last): 
    File "script.py", line 20, in <module> 
    RandomImageTwitt("/home/Pi/Bots/Pictures/") 
File "script.py", line 14, in RandomImageTwitt 
    image_open = open(images[random.randint(0,len(images))-1]) 
IndexError: list index out of range 

Я новичок в Python, если это может помочь, все мои файлы хранятся как это: 1.jpg, 2.jpg, 3.jpg ... все файлы находятся в jpg, и список начинается с 1.

Спасибо!

+0

Почему вы не используете 'random.choice'? 'images [random.randint (0, len (images)) - 1]' → 'random.choice (images)', что предотвратит ошибку такого типа. – falsetru

+0

Спасибо за повтор, поэтому я заменил 'image_open = open (images [random.randint (0, len (images)) - 1])' с 'image_open = random.choice (images)', я ничего не изменил, и я получаю эту ошибку: «Traceback (последний последний звонок): Файл« ewhring.py », строка 20, в RandomImageTwitt («/home/Pi/Bots/Pictures/») Файл« ewhring. py ", строка 14, в RandomImageTwitt image_open = random.choice (изображения) Файл« /usr/lib/python2.7/random.py », строка 275, по выбору return seq [int (self.random() * len (seq))] # вызывает IndexError, если seq пуст IndexError: индекс индекса вне диапазона –

+0

Что вы получаете, если печатаете 'images'? Он пуст? – falsetru

ответ

1

Убедитесь, что images не пуст.

Кстати, это лучше не использовать random.choice (нет необходимости вычислять индексировать себя, легче читать):

image_open = open(random.choice(images)) 

random.choice также поднимет IndexError, если последовательность пуста.

+0

Спасибо, чувак, но почему последовательность пуста? –

+0

Oh sh * t, это было просто/home/pi/Bots/Pictures /, а не/home/Pi/Bots/Pictures. Так что спасибо за случайный выбор и у вас хороший день! –