Я работаю над сценарием, чтобы отбросить ответы одного твита в журнале
Теперь я не работал над этим сам, и, наконец, заставил это почти работать, но я обнаружил ошибку индекса почти в конце, "Список индекса вне диапазона"
Я немного запутался, потому что я не понимаю, в чем здесь проблема ... может кто-нибудь объяснить? ._ .
def tweet_url(t):
return "https://twitter.com/%s/status/%s" % (t.user.screen_name, t.id)
def get_tweets(filename):
for line in open(filename):
yield twitter.Status.NewFromJsonDict(json.loads(line))
def get_replies(tweet):
user = tweet.user.screen_name
tweet_id = tweet.id
max_id = None
logging.info("looking for replies to: %s" % tweet_url(tweet))
while True:
q = urllib.parse.urlencode({"q": "to:%s" % user})
try:
replies = t.GetSearch(raw_query=q, since_id=tweet_id, max_id=max_id, count=100)
except twitter.error.TwitterError as e:
logging.error("caught twitter api error: %s", e)
time.sleep(60)
continue
for reply in replies:
logging.info("examining: %s" % tweet_url(reply))
if reply.in_reply_to_status_id == tweet_id:
logging.info("found reply: %s" % tweet_url(reply))
yield reply
# recursive magic to also get the replies to this reply
for reply_to_reply in get_replies(reply):
yield reply_to_reply
max_id = reply.id
if len(replies) != 100:
break
if __name__ == "__main__":
logging.basicConfig(filename="replies.log", level=logging.INFO)
tweets_file = sys.argv[1]
for tweet in get_tweets(tweets_file):
for reply in get_replies(tweet):
print(reply.AsJsonString())
Итак ... в нижней строке, список (sys.argv [1]) вызывает проблему здесь, но я не понимаю, почему появляется ошибка индекса вне диапазона, вы понимаете?
3 ответа
Из официальных документов Python -
Список аргументов командной строки, переданных скрипту Python. argv [0] - это имя сценария (это зависит от операционной системы, является ли это полным путем или нет).
Если бы я прочитал это, я бы читал до этой точки -
Список аргументов командной строки, передаваемых скрипту Python
Это означает, что sys.argv
является списком, и когда вы пытаетесь получить доступ к чему-либо из списка, которого нет в нем (по индексу), он дает вам IndexError
. Вам нужно вызвать ваш скрипт с нужными аргументами, и эти аргументы будут доступны из sys.argv[1]
Например -
python file_name.py some_argument
И some_argument
будет доступен из sys.argv[1]
. Вы можете проверить, были ли переданы аргументы в скрипт, используя try
или len
для argv, как -
try:
args = sys.argv[1]
except IndexError:
print('No argument passed')
Или -
if len(sys.argv) > 1:
args = sys.argv[1]
sys.argv
относится к аргументам командной строки, передаваемым вашему сценарию. Когда вы запустите скрипт, sys.argv[0]
будет именем вашего скрипта. sys.argv[1]
будет первым параметром, sys.argv[2]
вторым и т. Д. И т. Д. Ваш сценарий ожидает, что sys.argv[1]
будет именем файла для хранения результатов. Если это не предусмотрено, список sys.argv
будет иметь длину один, а индекс [1]
будет вне диапазона. Попробуйте запустить свой скрипт с
script.py output.txt
Ожидается аргумент командной строки вместе со скриптом.
Если вы запускаете его из командной строки, используйте это:
python script.py tweet_file.txt
Где,
argv [0] обрабатывается как скрипт name-script.py
arg [1] - это имя файла твита
Вы пропустили имя файла твита при исполнении. Из кода я думаю, что это может быть какой-то файл с твитами в нем.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.