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 ?
Jakie Wprowadzasz Dane, Maja byc intigery, floaty?
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?
Jak działa, to odznacz post, jako rozwiązany i pozamiatane:)
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
@Raloseq: jeśli chcesz coś lepszego niż try->catch, poczytaj https://docs.python.org/3/library/functions.html#isinstance
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.
@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
Peter Norvig tez uzywa try except
, mi to wystarczy:)
http://norvig.com/lispy.html