ich bin relativ neu in Sachen Python-Programmierung und stoße deshalb vermutlich gerade an meine Grenzen. Ich bin mir sicher für einige von euch wird es ein Leichtes sein, mir bei meinem Problem zu helfen.
Ich programmiere zur Zeit eine Art Anwesenheitskontrolle. Die Person legt einen RFID Chip auf und das Skript vermerkt die entsprechende Anwesenheit in einer SQLite Datenbank.
Außerdem werden die Daten in eine Log-Datei geschrieben. Das Skript soll vor dem vermerken der Anwesenheit immer prüfen, ob die RFID ID bereits in der log-Datei steht und falls ja, soll die Schleife abbrechen und auf den nächsten RFID Chip gewartet werden.
Da meine bestelltes RFID Modul noch nicht angekommen ist, ich aber trotzdem schon mal beginnen wollte, gebe ich die entsprechende ID zur Zeit per Hand ein.
Mein Problem ist es nun, aus der Schleife auszubrechen und auf die neue ID zu warten. In meinem Skript löse ich das zur Zeit mit sys.exit(), wodurch aber das ganze Skript beendet wird. Mit break und continue habe ich bereits etwas herumprobiert, allerdings wird der weitere Code dann anschließend trotzdem ausgeführt. Wie kann ich das in diesem Falle vernünftig lösen?
Vielen Dank im Voraus für eure Hilfe!
Code: Alles auswählen
import sqlite3
import time
import sys
import winsound
db = sqlite3.connect('sql-test.db')
c = db.cursor()
timestamp = (time.strftime("%H:%M:%S"))
x = (time.strftime("%d%m%Y"))
y = x.replace(".","")
tagesdatum = "P"+y
while 1:
#RFID ID erhalten
rfid = input("RFID: ")
#RFID in Log pruefen
logr = open(""+tagesdatum+".log", "r")
for line in logr:
if rfid in line.rstrip():
print("Du bist bereits anwesend gemeldet")
winsound.Beep(2500, 900) #erzeugt Ton zur visualisierung des Fehlers
sys.exit() #Programm stoppen, falls User RFID bereits in log
#RFID in Log schreiben
logw = open(""+tagesdatum+".log", "a")
name = c.execute("SELECT Vorname,Nachname FROM attendance WHERE RFID = '"+rfid+"';").fetchone()
logw.write(time.strftime("%d.%m.%Y") + " | " + timestamp + " | ID: "+rfid+" | Name: "+str(name[0])+" "+str(name[1])+""'\n')
logw.close()
#Anwesenheit in DB loggen
c.execute("UPDATE attendance SET "+tagesdatum+" = '1' WHERE RFID = '"+rfid+"';")
name = c.execute("SELECT Vorname,Nachname FROM attendance WHERE RFID = '"+rfid+"';").fetchone()
print("Hallo "+str(name[0])+" "+str(name[1])+"!")
print("Du hast dich erfolgreich anwesend gemeldet.")
winsound.Beep(2500, 100) #erzeugt Ton zur visualisierung des erfolgreichen ausfuehrens
#DB schliessen
db.commit()
c.close()