ValueError:对于基数为10的int()无效字面值:Python中的'NewFilmLikes'

问题描述:

我想从SQLite3数据库获取值并将其放入名为FilmLikes的变量中,然后我想向其中添加一个值将其存储在变量NewFilmLikes中。然后我试着在我的数据库更改此框中的值到“NewFilmLikes”,但我总是得到这样的问题:ValueError:对于基数为10的int()无效字面值:Python中的'NewFilmLikes'

ValueError异常:无效的字面INT()基数为10:“NewFilmLikes”

这里是代码表明:

FilmLikes=i[2] 
NewFilmLikes=(int(FilmLikes))+1 
filmUpdate=("UPDATE HORRORALL SET likes = ? WHERE number = 1"(NewFilmLikes)) 
c.execute(filmUpdate) 
conn.commit() 

这里是我的代码:

for i in find_film: 
          print('') 
          print('Number',(i[0])) 
          print(i[1]) 
         filmChoice=int(input('Please choose which number you would like to like: ')) 
         if filmChoice==1: 
          find_film=c.execute("SELECT * FROM HORRORALL") 
          for i in find_film: 
           if i[0]==filmChoice: 
##         FilmLikes=i[2] 
            try: 
             x=(int(i[2]))+1 
            except: 
             pass 
##          FilmLikes=i[2] 
##         NewFilmLikes=(int(str(FilmLikes)))+1 
            filmUpdate=("UPDATE HORRORALL SET likes = ? WHERE number = 1"(x)) 
            c.execute(filmUpdate) 
            conn.commit() 
+0

显示'i'的代码。 –

+0

我已将它添加到主帖@CL –

+0

这两个代码摘录彼此不一致。你为什么要显示注释掉的代码?确保缩进是正确和一致的。 –

你得到的值错误,因为变量,你正试图转换到整数不能转换。这是因为变量是'你好',所以不是一个整数。解决这个问题的方法是尝试将其转换为如此类似的内容。 try: i=(int(x))+1 except: pass

+0

我现在只是得到这个错误:UnboundLocalError:本地变量'x'在赋值之前引用的代码:try: x =(int(i [2]))+ 1 除外: pass –

不知道更多关于您的设置,很难正确回答这个问题。
请注意,您提到的具体错误(ValueError: invalid literal for int() with base 10: 'NewFilmLikes')通常发生在获取小数而不是整数时。

这是一种普遍的答案。

  1. 最好不要使用SELECT *,因为它隐藏了您试图检索的内容。通过这种方式指定,例如SELECT film_id, file_name, no_of_likes FROM horrorall,您可以看到您正在检索的内容和位置。
  2. 您正在检索整个电影列表find_film,然后循环查找哪一个。 SQL有一个查找功能,它被称为WHERE,您正在使用它在film_update部分。如果您有用户输入的ID或姓名,则可以只拨打您需要的记录。例如。 "SELECT film_id, file_name, no_of_likes FROM horrorall WHERE film_id = ?" (filmChoice,)
  3. 需要注意的是参数化查询使用一个元组,即使只有一个参数 - 因此,它是(filmChoice)用逗号(和filmUpdate你需要(x,)
  4. filmUpdate将只更新了第一部电影。我认为,因为你的if ...循环继续通过所有可能的选择?你可以通过在其中放置另一个?来为你的WHERE例如filmUpdate=("UPDATE HORRORALL SET likes = ? WHERE number = ?"(x,i[0]))
  5. 用户如何知道要选择什么电影?直到他们给你一个号码,你才会检索这个列表!

把所有这些放在一起,这里是一个例子。请注意,这并不是理想的做法,我不想一次性向您抛出太多的想法!

# Get the whole list of films to show to the user 
find_film = c.execute("SELECT film_id, film_name FROM HORRORALL") 
# Present the list for selection 
for films in find_film: 
    print(str(films[0]) + '. ' + films[1]) 
# Get the users input as an integer 
filmChoice = int(input('Please choose which number you would like to like: ')) 
# Fetch the number of likes of the selected film 
film_likes = c.execute('SELECT likes FROM HORRORALL WHERE film_id = ?' (filmChoice,)) 
# Send the update back to the database 
c.execute("UPDATE HORRORALL SET likes = ? WHERE film_id = ?"(int(film_likes[0]) + 1, filmChoice) 
conn.commit()