2014-01-20 3 views
0

Ive писал этот скрипт python некоторое время, и я просто столкнулся с этой ошибкой. Im думает, что мне нужно иметь еще одно значение для распаковки, но я не знаю, какое значение им должно было вложить туда? Любая помощь будет принята с благодарностью.Raspberry Pi Python ValueError?

ОШИБКА

File "door_controllerTEST_V4_RFID.py", line 101, in <module> 
    main() 

    File "door_controllerTEST_V4_RFID.py", line 94, in main 
    authenticator = RfidFileAuthenticator() 

    File "door_controllerTEST_V4_RFID.py", line 73, in __init__ 
    self.readFile() 

    File "door_controllerTEST_V4_RFID.py", line 80, in readFile 
    id, tag = line.split(',') 

ValueError: need more than 1 value to unpack 

Script

#!/usr/bin/env python3 
"""Door Lock: System to control an electric lock""" 

import piface.pfio as piface 
import piface.pfio as pfio 
from time import sleep 
pfio.init() 

class AuthToken: 
    def __init__(self, id, secret): 
     self.id=id 
     self.secret=secret 

class DoorControllerPiFace: 
    def send_open_pulse(self): 
     piface.digital_write(0,1) 
     sleep(5) 
     piface.digital_write(0,0) 

class RfidInput: 
    def getInput(self): 
     print "waiting for tag" 
     tag = raw_input() 
     return AuthToken(None,tag) 

class RfidFileAuthenticator: 
    filename = "tags.txt" 
    tags = dict() 
    def __init__(self): 
     self.readFile() 

    def readFile(self): 
     secrets = open(self.filename, 'r') 
     print "reading from " + self.filename + " file" 
     for line in secrets: 
       line = line.rstrip('\n') 
       id, tag = line.split(',') 
       self.tags[tag] = id 

    def check(self,token): 
     print "checking if " + token.secret + " is valid" 
     if token.secret in self.tags: 
      print "tag found belonging to: " + self.tags[token.secret] 
      return True 
     else: "tag not found" 
     print 
     return False 

def main(): 
    authInput = RfidInput() 
    authenticator = RfidFileAuthenticator() 
    doorController = DoorControllerPiFace() 

    if(authenticator.check(authInput.getInput())): 
     doorController.send_open_pulse() 

if __name__ == '__main__': 
     main() 

ответ

1
File "door_controllerTEST_V4_RFID.py", line 80, in readFile 
    id, tag = line.split(',') 

ValueError: need more than 1 value to unpack 

Скорее всего, line не содержит запятую. В результате .split(',') вернул только одну строку, поэтому он не смог распаковать ваши две нужные переменные.

Для целей отладки print line перед тем, как попытаться разбить его, чтобы узнать, содержит ли он ожидаемую информацию. Если нет, вы должны работать в обратном порядке, чтобы попытаться увидеть, откуда приходит неожиданное значение.

+0

Итак, идея пришла ко мне об этом, желая больше линий. Поэтому у меня была только одна строка в моем файле секретов. Поэтому я добавил несколько фиктивных строк, чтобы проверить, не ищет ли он больше имен. И бам! это сработало. После добавления некоторых фиктивных имен пользователей и пароля скрипт работал отлично – Celerium