@superdurszlak właśnie tak to rozumuję. W tym co napisałem najpierw jest sprawdzany od lewej pierwszy warunek jeśli jest prawdziwy nie jest sprawdzany drugi tylko pętla if jest wykonywana. Natomiast jeśli pierwszy warunek nie jest spełniony sprawdzany jest drugi i jeśli jest spełniony wchodzi do if. Jeśli żadne nie są spełnione if jest pomijany. I dlatego pytam dlaczego ten if działa:
if zapytanie == None or zapytanie[0] == "":
natomiast ten nie działa:
if zapytanie[0] == "" or zapytanie == None:
Mówiąc o zamienności warunków w przypadku or chodzi mi o to że pierwszy jest warunek None czy sprawdzanie pustej tablicy jest wszytko jedno.
Generalnie jest to kawałek kodu sprawdzania użytkownika w logowaniu.
kod:
if zapytanie == None or zapytanie[0]=="":
print("jesteś jednak")
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText("Błąd logowania")
msg.setInformativeText('Podałeś błędny login <br> Spróbuj jeszcze raz')
msg.setWindowTitle("Błąd")
msg.exec()
else:
if zapytanie[1]== self.password_line.text():
self.dialog = main.main_window()
self.dialog.show()
self.close()
else:
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText("Błąd logowania")
msg.setInformativeText('Podałeś błedne hasło <br> Spróbuj jeszcze raz')
msg.setWindowTitle("Błąd")
msg.exec()
Mój tok myślenia jest taki. Użytkownik wpisuje prawidłowo login i hasło. Baza zwraca mi tego użytkowniczka oraz hasło. Hasło jest sprawdzane te wpisane z tym co wyrzuciła baza jeśli jest poprawne wchodzimy do programu. Jeśli hasło jest złe wypisywany jest komunikat. Natomiast jeśli Login jest źle wpisany baza danych zwraca mi None natomiast jeśli użytkownik nie wpisze loginu baza zwróci mi ('', '').
Dlatego moim zaskoczeniem jest to że jeżeli "zamienię" te dwa warunki wejścia do pętli if miejscami dostaje taki błąd:
if zapytanie[0] =="" or zapytanie == None:
TypeError: 'NoneType' object is not subscriptable
Nie wiem dlaczego się tak dzieje. Kolejność warunków w przypadku or nie powinna mieć znaczenia. Chyba że ja mam jakieś braki wiedzy, lub coś źle rozumuję lub mam gdzieś błąd w kodzie i powielam go nieświadomie. Dodam że jeżeli ustawienie warunków if jest "prawidłowe" program zachowuje się prawidłowo i nie wysypuje żadnych błędów. Dlatego chciałbym się dowiedzieć dlaczego "odwrotne" ustawienie warunków if powoduje błędy jak i tak podczas działania programu sprawdzany jest albo jeden warunek albo drugi. Tego nie mogę zrozumieć.