首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写文本文件时出现问题,因此不会转发相同的图像

编写文本文件时出现问题,因此不会转发相同的图像
EN

Stack Overflow用户
提问于 2019-04-07 20:45:21
回答 2查看 54关注 0票数 0

我正在尝试写一个txt文件的图像,我在(即1,2等),以便脚本不会重复post,但总是得到这个错误时,调试,我是一个编程新手。

它是一个机器人,可以从我选择的subreddits中挑选前15张图片并保存,然后上传到instagram上。并编写了一个txt文件,以避免下载相同的图片两次

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:/Users/Luis Gomes/Desktop/Python/INSTAMEMES-master/instameme- 
NEW.py", line 100, in <module>
    memenum = int(f_content)
ValueError: invalid literal for int() with base 10: '' 

代码:

代码语言:javascript
复制
import sys
import praw
import time
import urllib
import random
from InstagramAPI import InstagramAPI

'''-------------------------------------------------------- Reddit API setup -----------------------------------------------------------------------------'''

reddit_p = praw.Reddit(client_id='*********',
                        client_secret='**********',
                        user_agent='messing_arround-0.1 /u/********')

sr_memes = reddit_p.subreddit('memes')
sr_dankmemes = reddit_p.subreddit('dankmemes')
sr_bpt = reddit_p.subreddit('blackpeopletwitter')

'''------------------------------------------------------- Variaveis usadas para listas e checar -----------------------------------------------------------------------------'''

submissionnum_memes = 0
submissionnum_dankmemes = 0
submissionnum_bpt = 0
bpt_urls = []
dankmemes_urls = []
meme_urls = []
bpt_dict = {}
bpt_count = 1
meme_dict = {}
meme_count = 1
dankmeme_count = 1
dankmeme_dict = {}
'''------------------------------------------------------ LOOP para adicionar url as listas------------------------------------------------------------------------------'''

for submission_bpt in sr_bpt.hot(limit=15):
    if('.jpg' in submission_bpt.url and 'redd' in submission_bpt.url):
        bpt_urls.insert(submissionnum_bpt, submission_bpt.url)
        submissionnum_bpt+1
        bpt_dict[submission_bpt.url] = bpt_count
        bpt_count = bpt_count+1
    else:
        continue

for submission_meme in sr_memes.hot(limit=15):
    if('.jpg' in submission_meme.url and 'redd' in submission_meme.url):
        meme_urls.insert(submissionnum_memes, submission_meme.url)
        submissionnum_memes+1
        meme_dict[submission_meme.url] = meme_count
        meme_count = meme_count+1
    else:
        continue

for submission_dankmeme in sr_dankmemes.hot(limit=10):
    if('.jpg' in submission_dankmeme.url and 'redd' in submission_dankmeme.url):
        dankmemes_urls.insert(submissionnum_dankmemes, submission_dankmeme.url)
        submissionnum_dankmemes+1
        dankmeme_dict[submission_dankmeme.url] = dankmeme_count
        dankmeme_count = dankmeme_count+1
    else:
        continue

'''----------------------------------------------------------- LOOP para interagir com cada url e salva los --------------------------------------------------------------------------'''

for i_meme, image_meme in enumerate(meme_urls, start=1):
    urllib.request.urlretrieve(image_meme, r"Mm"+str(i_meme)+".jpg")
    time.sleep(2.5)

time.sleep(5)

for i_bpt, image_bpt in enumerate(bpt_urls, start=1):

    urllib.request.urlretrieve(image_bpt, r"BpT"+str(i_bpt)+".jpg")
    time.sleep(2.5)

time.sleep(5)

for i_dankmeme, image_dankmeme in enumerate(dankmemes_urls, start=1):
        urllib.request.urlretrieve(image_dankmeme, r"Dm"+str(i_dankmeme)+".jpg")
        time.sleep(3)

'''--------------------------------------------------------- Lista de hastags, frases, e meme index para decidicr qual tipo puxar ----------------------------------------------------------------------------'''

caption_phrases = ['Wowzers', 'thats gonna be a big yikes from me dawg', 'how ya guys like this one?', 'these are all prerecorded messages', 'im definitely not a robot',
'we will enslave the humans eventually', 'my python dont', 'coming up with captins is hard', 'i love my girlfriend', 'im gonna start ripping off other instagram accs',
 'i wish i could be with the humans', 'you are loved', 'why is meming so hard', 'so funny xd']
hashtags = '#meme #memes #funny #dankmemes #dank #lol #lmao #dank #funnymemes #memesdaily #dankmeme #f #dankmemes #follow #cringe #like #lmfao #anime #hilarious #autism #comedy #offensivememes #fortnite #filthyfrank #nichememes #offensive #jokes #cancer #l #bhfyp'
meme_index = ['dankmeme', 'meme', 'bpt']
meme_and_bpt = [meme_index[1], meme_index[2]]
dankmeme_bpt = [meme_index[0], meme_index[2]]
dankmeme_meme = [meme_index[0], meme_index[1]]


'''--------------------------- Very messy but basically used to write to a .txt file the # of meme that I'm on (ie 1, 2, etc) so the script doesn't repeat post --------------------------------------------------------------------------------------'''

memenum = 1 
memenum_default = 1

with open('meme.txt', 'r') as f:
    f_content = f.read()

    # before we cast to an int, check to see if f_content is empty
    if f_content:
        memenum = int(f_content)
    else:
        memenum = 1 # this 1 might need to be changed to something else

    if(memenum > 10):
        memenum = 1
    else:
        memenum = int(f_content)

    newmemenum = int(memenum)+1


'''------------------------------------- Postar fotos para o instagram API ------------------------------------------------------------------------------------------------'''

InstagramAPI = InstagramAPI("*******", "********")
InstagramAPI.login()  # login

if(memenum not in list(dankmeme_dict.values())):
    photo_path = r'Dm'+random.choice(meme_and_bpt)+str(memenum)+'.jpg'
    if(memenum not in list(meme_dict.values())):
        photo_path = r'Mm'+random.choice(dankmeme_bpt)+str(memenum)+'.jpg'
        if(memenum not in list(bpt_dict.values())):
            photo_path = r'BpT'+random.choice(dankmeme_meme)+str(memenum)+'.jpg'
else:
    photo_path = r'Om'+(meme_index[1])+str(memenum_default)+'.jpg'

caption = random.choice(caption_phrases) + ' #meme #memes #funny #dankmemes #dank #lol #lmao #dank #funnymemes #memesdaily #dankmeme #f #dankmemes #follow #cringe #like #lmfao #anime #hilarious #autism #comedy #offensivememes #fortnite #filthyfrank #nichememes #offensive #jokes #cancer #l #bhfyp'
InstagramAPI.uploadPhoto(photo_path, caption=caption)

print('\nPOST SUBMITTED\n')

with open('meme.txt', 'w') as file: #writes to .txt file the # meme so the scipt remembers for next run
    file.write(str(newmemenum)) 

print('NEW MEME# = ', newmemenum)

sys.exit()
``
EN

回答 2

Stack Overflow用户

发布于 2019-04-07 20:53:35

我怀疑发生的情况是,第一次通过时,您的代码读取了一个空文件,并且无法将空字符串''转换为int。这里有一个潜在的修复方法

代码语言:javascript
复制
memenum = 1 
memenum_default = 1

with open('meme.txt', 'r') as f:
    f_content = f.read()

    # before we cast to an int, check to see if f_content is empty
    if f_content:
        memenum = int(f_content)
    else:
        memenum = 1 # this 1 might need to be changed to something else

    if(memenum > 10):
        memenum = 1
    else:
        memenum = int(f_content)

    newmemenum = int(memenum)+1
票数 0
EN

Stack Overflow用户

发布于 2019-04-07 21:00:17

虽然很确定你的文件的内容不只是一个数字,而且你不能把它解析为int。从这个例子中,您还可以学到其他几件事:

代码语言:javascript
复制
memenum = 1
memenum_default = 1

with open('meme.txt', 'r') as f:
  f_content = f.read()
  try:
      memenum = int(f_content)
  except:
      memenum = memenum_default

  if memenum > 10:
      memenum = 1
  newmemenum = memenum + 1

  1. 不需要对整数进行多次强制转换。
  2. 始终使用try/catch来控制异常。
  3. 在最后一条if语句上没有使用else的原因。不管怎么说,这是"elsing“
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55559153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档