मूल समस्या है कि ip_network()
को दर्शाता है एक IPv4Network/IPv6Network
वस्तु जो नेटवर्क पता होना आवश्यक है एक यूनिकोड स्ट्रिंग हो रहा है। पायथन 3 में यह ठीक है, लेकिन पायथन 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()
कैच इस अपवाद और उठाती एक कम विस्तृत संदेश के साथ एक ValueError
: अजगर 2 में
>>> 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
तो यह एक यूनिकोड मुद्दे की तरह दिखता है। एक संभावित स्पष्टीकरण यह है कि शायद PyCharm पायथन> = 3.3 का उपयोग कर रहा है जो मानक लाइब्रेरी में मॉड्यूल ipaddress
प्रदान करता है और जिसमें स्ट्रिंग डिफ़ॉल्ट रूप से यूनिकोड होते हैं। आपकी कमांड लाइन पायथन संस्करण 2 हो सकती है, जिसमें स्ट्रिंग्स बाइट स्ट्रिंग्स के लिए डिफ़ॉल्ट हैं, और ipaddress.ip_network()
ऊपर दिखाए गए अनुसार विफल हो जाएंगे। मुझे इस बारे में निश्चित नहीं है क्योंकि print srcIp
कथन इंगित करता है कि आप दोनों मामलों में पायथन 2 का उपयोग कर रहे हैं?
एक और संभावना यह है कि PyCharm किसी भी तरह से पायथन 2 के भीतर स्ट्रिंग अक्षर के एन्कोडिंग को प्रभावित कर रहा है। मुझे PyCharm के बारे में लगभग कुछ नहीं पता है, लेकिन एन्कोडिंग विकल्प सेट किए जा सकते हैं। शायद ये प्रभावी रूप से from __future__ import unicode_literals
के समान कुछ करते हैं।
'ipaddress' पायथन में मौजूद नहीं था 2.7 –
यदि आप [' ipaddress' दस्तावेज़] (https://docs.python.org/3/library/ipaddress.html) देखते हैं, तो यह "संस्करण 3.3 में नया" पढ़ता है । " यह ["व्हाट्स न्यू इन पायथन 3.3" पृष्ठ पर भी दस्तावेज किया गया है (https://docs.python.org/3/whatsnew/3.3.html)। –
@ZachGates https://pypi.python.org/pypi/ipaddress – poke