Sprawdzanie poprawności danych

0

Witam mam pytanie czy da się jakoś sprawdzić poprawność wprowadzonych danych np. wprowadzamy x = int(input()) i jezeli wprowadzimy literke to powinno wyskoczyc zle dane ?

0

Jakie Wprowadzasz Dane, Maja byc intigery, floaty?

0

Takie coś zrobiłem i działa

try:
    x = int(input())
    print("To liczba")
except ValueError:
    print("To nie liczba")

```> ##### [lion137 napisał(a)](https://4programmers.net/Forum/1531069):
> Jakie Wprowadzasz Dane, Maja byc intigery, floaty?
0

Jak działa, to odznacz post, jako rozwiązany i pozamiatane:)

1

Można też w pętli:

    while True:
        try:
            val = int(input("Enter a number "))
        except ValueError:
            print("Can't read a number, try again")
            continue
        else:
            break
1

@Raloseq: jeśli chcesz coś lepszego niż try->catch, poczytaj https://docs.python.org/3/library/functions.html#isinstance

0
komuher napisał(a):

@Raloseq: jeśli chcesz coś lepszego niż try->catch, poczytaj https://docs.python.org/3/library/functions.html#isinstance

Ależ to jest zła odpowiedź, poprawnym, Pythonowym rozwiązaniem są właśnie wyjątki.

1

@enedil:
Poprawnym i działającym :).
Jak zrobimy isinstance() na input() wymagając integera, to zawsze będzie fałszem, bo input() zwraca string.
A jeśli zrobimy int(input()) to i tak przed dojściem do isinstance() wyrzuci nam błąd przy próbie konwersji.

Rozumiem jeszcze jakby ktoś tutaj zaproponował dla uniknięcia try->except metodę stringa: isdigit() która sprawdza czy string składa się z cyfr, ponieważ jest to szybsze od try->except i ma jakąkolwiek korzyść.
Niestety isinstance w tym przypadku to niestety bzdura, nie polecam takiej kombinatoryki.

Przykład z isdigit() #Nie stosować dla float, ponieważ kropki nie są cyframi akceptowalnymi przez isdigit.

while True:
  val = input("Enter a number")
  if val.isdigit():
    val = int(val)
    break
  else:
    print("Can't read a number, try again.")

Oczywiście to tylko na wzór while lion'a.
I sam nie wiem czy dla czytelności użyłbym isdigit, czy try: except:. Wiele tu nie przyspieszy nam program, bo najwolniejszym elementem i tak jest 'uży-szkodnik' próbujący wysypać program wejściem :D

0

Peter Norvig tez uzywa try except, mi to wystarczy:)
http://norvig.com/lispy.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1