Python 3.3+ipaddressфункция
ipaddress.ip_address()
фабричные функции
Создаёт IPv4Address или IPv6Address из строки, целого числа или байтов — версию протокола функция определяет сама.
Синтаксис
ipaddress.ip_address(address)
Ошибочная строка даёт обычный ValueError, а не AddressValueError: фабрика не знает, какую версию вы имели в виду, поэтому except AddressValueError вокруг неё не сработает никогда. Целое число трактуется как номер адреса: ip_address(1) — это 0.0.0.1, а числа от 2**32 уже дают IPv6. Пробелы по краям и ведущие нули в октетах ('010.0.0.1') отвергаются — строку из ввода сначала очищают strip().
Примеры
import ipaddress
print(repr(ipaddress.ip_address('192.168.0.1'))) # → IPv4Address('192.168.0.1')
print(repr(ipaddress.ip_address('::1'))) # → IPv6Address('::1')
print(repr(ipaddress.ip_address(1))) # → IPv4Address('0.0.0.1') — число, а не строка
import ipaddress
def is_ip(text):
try:
ipaddress.ip_address(text.strip())
return True
except ValueError: # AddressValueError здесь не прилетит
return False
print(is_ip(' 10.0.0.1 '), is_ip('192.168.0.256'), is_ip('010.0.0.1')) # → True False False
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности