Więcej
Sprawdzanie, czy zmienna jest liczbą całkowitą czy nie
Jak sprawdzić, czy zmienna jest liczbą całkowitą?
826
3
Jak sprawdzić, czy zmienna jest liczbą całkowitą?
Jeśli musisz to zrobić, zrób
chyba że pracujesz w Pythonie 2.x, w którym to przypadku chcesz
Nie należy używać
type
. To prawie nigdy nie jest właściwa odpowiedź w Pythonie, ponieważ blokuje całą elastyczność polimorfizmu. Na przykład, jeśli podklasujeszint
, twoja nowa klasa powinna zarejestrować się jakoint
, czegotype
nie zrobi:Jest to zgodne z silnym polimorfizmem Pythona: powinieneś pozwolić na dowolny obiekt, który zachowuje się jak
int
, zamiast nakazać, aby był jednym z nich.BUT
Klasyczną mentalnością Pythona jest to, że łatwiej jest prosić o wybaczenie niż o pozwolenie. Innymi słowy, nie sprawdzaj, czy
x
jest liczbą całkowitą; załóż, że jest i złap wynik wyjątku, jeśli nie jest:Ta mentalność jest powoli wypierana przez użycie abstrakcyjnych klas bazowych, które pozwalają zarejestrować dokładnie, jakie właściwości powinien mieć nasz obiekt (dodawanie? mnożenie? podwajanie?) poprzez dziedziczenie po specjalnie skonstruowanej klasie. Byłoby to najlepsze rozwiązanie, ponieważ pozwoli na dokładnie te obiekty z niezbędnymi i wystarczającymi atrybutami, ale będziesz musiał przeczytać dokumenty, jak z tego korzystać.
Zobacz tutaj, aby dowiedzieć się więcej.
Zauważ, że to nie pomaga, jeśli'szukasz atrybutów
int
-like. W tym przypadku możesz również chcieć sprawdzić dlalong
:I've seen checks of this kind against an array/index type in the Python source, but I don't think that's visible outside of C.
Token SO odpowiedź: Czy na pewno powinieneś sprawdzić jego typ? Albo nie przekazuj typu, którego nie możesz'obsłużyć, albo nie próbuj przechytrzyć swoich potencjalnych reużytkowników kodu, mogą mieć dobry powód, aby nie przekazywać int do swojej funkcji.
Znalazłem powiązane pytanie tutaj na samym SO.
Programiści Pythona wolą nie sprawdzać typów, ale wykonać operację specyficzną dla typu i złapać wyjątek
TypeError
. Ale jeśli nie'znasz typu, wtedy masz następujące.