Das zugrunde liegende Problem ist, dass ip_network()
instanziiert ein IPv4Network/IPv6Network
Objekt, das die Netzwerkadresse erfordert eine Unicode-Zeichenfolge zu sein. In Python 3 ist das in Ordnung, aber in Python 2 sind Strings standardmäßig nicht Unicode. In Python 2:
>>> import ipaddress
>>> ipaddress.IPv4Network('10.0.0.0/24')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ipaddress.py", line 1486, in __init__
self.network_address = IPv4Address(address)
File "ipaddress.py", line 1271, in __init__
self._check_packed_address(address, 4)
File "ipaddress.py", line 528, in _check_packed_address
expected_len, self._version))
ipaddress.AddressValueError: '10.0.0.0/24' (len 11 != 4) is not permitted as an IPv4 address (did you pass in a bytes instead of a unicode object?)
>>> ipaddress.IPv4Network(u'10.0.0.0/24')
IPv4Network(u'10.0.0.0/24')
ipaddress.ip_network()
Fänge diese Ausnahme und wirft eine ValueError
mit einer weniger detaillierten Nachricht:
>>> ipaddress.ip_network('10.0.0.0/24')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "ipaddress.py", line 148, in ip_network
address)
ValueError: '10.0.0.0/24' does not appear to be an IPv4 or IPv6 network
So sieht es aus wie eine Unicode-Ausgabe. Eine mögliche Erklärung ist, dass PyCharm Python> = 3.3 verwendet, das das Modul in der Standardbibliothek bereitstellt und in dem Strings standardmäßig Unicode sind. Ihre Befehlszeile Python könnte Version 2 sein, in der Zeichenfolgen standardmäßig Bytezeichenfolgen entsprechen, und ipaddress.ip_network()
schlägt fehl, wie oben gezeigt. Ich bin mir nicht sicher, weil die print srcIp
-Anweisung anzeigt, dass Sie in beiden Fällen Python 2 verwenden? Eine andere Möglichkeit ist, dass PyCharm irgendwie die Kodierung von String-Literalen in Python 2 beeinflusst. Ich weiß fast nichts über PyCharm, aber es gibt Kodierungsoptionen, die gesetzt werden können. Vielleicht machen diese etwas ähnlich wie from __future__ import unicode_literals
.
'ipaddress' existiert nicht in Python 2.7 –
Wenn Sie die [' ipaddress' Dokumentation] (https://docs.python.org/3/library/ipaddress.html) sehen, wird "Neu in Version 3.3" angezeigt . " Dies ist auch auf der Seite "Was ist neu in Python 3.3?" (Https://docs.python.org/3/whatsnew/3.3.html) dokumentiert. –
@ZachGates https://pypi.python.org/pypi/ipaddress – poke