Python ipaddress.IPv6Address AddressValueError beheben: Unexpected '/' in '.../64'
Problem:
Beim Versuch, eine IPv6-Netzwerkadresse in Python mit Code wie
import ipaddress
ipaddress.IPv6Network("2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64")erscheint eine Fehlermeldung wie
AddressValueError Traceback (most recent call last)
/tmp/ipykernel_154945/2602627019.py in
/usr/lib/python3.8/ipaddress.py in init(self, address) 1836 addr_str = str(address) 1837 if ‘/’ in addr_str: 1839 self._ip = self._ip_int_from_string(addr_str) 1840
AddressValueError: Unexpected ‘/’ in ‘2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64’
---------------------------------------------------------------------------
AddressValueError Traceback (most recent call last)
/tmp/ipykernel_154945/2602627019.py in <module>
----> 1 ipaddress.IPv6Address("2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64")
/usr/lib/python3.8/ipaddress.py in __init__(self, address)
1836 addr_str = str(address)
1837 if '/' in addr_str:
-> 1838 raise AddressValueError("Unexpected '/' in %r" % address)
1839 self._ip = self._ip_int_from_string(addr_str)
1840
AddressValueError: Unexpected '/' in '2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64'Lösung 1: CIDR-Netzmaske entfernen (/64)
Durch einfaches Entfernen des Schrägstrichs und des Teils danach (der CIDR-Netzmaske).
Lösung 1: Vielleicht sollte stattdessen IPv6Network statt IPv6Address verwendet werden
Wenn das Netzwerk geparst werden soll, ipaddress.IPv6Network verwenden, aber beachten, dass dies alle Host-Bits verwirft. Ob IPv6Address oder IPv6Network verwendet werden sollte, hängt davon ab, was damit gemacht werden soll – wenn auf einen spezifischen Host verwiesen werden soll, wird fast immer IPv6Address verwendet.
import ipaddress
ipaddress.IPv6Network("2a01:c23:c0bb:d00:8ce6:2eff:fe60:cc69/64", strict=False)Beachten, dass strict=False hinzugefügt wird, um eine Ausnahme aufgrund gesetzter Host-Bits zu verhindern – siehe Python ipaddress.IPv6Network ValueError beheben: … has host bits set