* class advice impossible in python3. use the @implementer class decorator instead...
More or less similar with this issue:
zope.interface has had a feature for 10 years under Python2 which
can't be made to work portably under Python3. It is spelled like:
from zope.interface import Implements
class Foo(object):
implements(IFoo)
There is a newer, Python3-compatible spelling, which the pyramid trunk
now uses (as of today):
from zope.interface import implementer
@implementer(IFoo)
class Foo(object):
pass
(That spelling only works under Python >= 2.6)
* ImportError: No module named 'urlparse'
simply refer to this page:urlparse
is part of the standard Python 2 library. It's shipped as part of Python; it isn't packaged separately on PyPI et al. urlparse.urlparse
(the function) was renamed in Python 3 to urllib.parse
.If you need to write code which is Python2 and Python3 compatible you can use the following import
try:
from urllib.parse import urlparse
except ImportError:
from urlparse import urlparse
from urllib.parse import urlparse work for me* ImportError: No module named 'ConfigParser'
What I normally do:
import configparser as ConfigParser
* ImportError: No module named 'StringIO'
The StringIO and cStringIO modules are gone. Instead, import the io module and use io.StringIO or io.BytesIO for text and data respectively.
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
* ImportError: No module named 'HTMLParser'
Solution:from html.parser import HTMLParser
Sample:from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Encountered a start tag:", tag)
def handle_endtag(self, tag):
print("Encountered an end tag :", tag)
def handle_data(self, data):
print("Encountered some data :", data)
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')
* ImportError: No module named httplib
In Python 3, the module has been renamed to http.client
import http.client
httpRequest = ""
conn = http.client.HTTPConnection("localhost",8080)
conn.request("GET","/file.html",httpRequest)
response = conn.getresponse()
print(response.status,response.reason)
conn.close();
* ImportError: No module named urllib2
In python 3 urllib2 was merged into urllib.
To make Python 2 code work in Python 3:
try:
import urllib.request as urllib2
except ImportError:
import urllib2
import urllib.request
wp = urllib.request.urlopen("http://goggle.com")
pw = wp.read()
print(pw)
* ImportError: No module named 'BaseHTTPServer'
BaseHTTPServer, SimpleHTTPServer modules in Python 2 have been merged into http.server module in Python 3. Sample:
import http.server
import ssl
httpd = http.server.HTTPServer(('localhost', 4443), http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='server.pem', server_side=True)
httpd.serve_forever()
* TypeError: the JSON object must be str, not 'bytes'
In short; decode:
result = json.loads(response.readall().decode('utf-8'))
* TypeError: Unicode-objects must be encoded before hashing
Refer to this similar issue:
line.encode('utf-8')
or:
str(line)
* NameError: global name 'unicode' is not defined
Yes, again this is Python 3. Python 3 renamed the unicode type to str, the old str type has been replaced by bytes.
if isinstance(unicode_or_str, str):
text = unicode_or_str
decoded = False
else:
text = unicode_or_str.decode(encoding)
decoded = True
In short; use str(*)
No comments:
Post a Comment