diff --git a/src/commands.py b/src/commands.py index d245a9a46..5619ce6cd 100644 --- a/src/commands.py +++ b/src/commands.py @@ -888,6 +888,7 @@ class first(context): spec(irc, msg, args, state) return except Exception, e: + e2 = e # 'e' is local. errored = state.errored state.errored = False continue @@ -895,7 +896,7 @@ class first(context): state.args.append(self.default) else: state.errored = errored - raise e + raise e2 class reverse(context): def __call__(self, irc, msg, args, state): diff --git a/src/httpserver.py b/src/httpserver.py index ab2c34403..0c41b3437 100644 --- a/src/httpserver.py +++ b/src/httpserver.py @@ -257,7 +257,7 @@ class SupyHTTPServerCallback: self.send_header('Content_type', 'text/plain; charset=utf-8') self.send_header('Content-Length', len(self.defaultResponse)) self.end_headers() - self.wfile.write(self.defaultResponse) + self.wfile.write(self.defaultResponse.encode()) doPost = doHead = doGet @@ -279,7 +279,7 @@ class Supy404(SupyHTTPServerCallback): self.send_header('Content_type', 'text/plain; charset=utf-8') self.send_header('Content-Length', len(self.response)) self.end_headers() - self.wfile.write(self.response) + self.wfile.write(self.response.encode()) doPost = doHead = doGet @@ -346,7 +346,7 @@ class Favicon(SupyHTTPServerCallback): self.send_header('Content-type', 'text/plain') self.send_header('Content-Length', len(response)) self.end_headers() - self.wfile.write(response) + self.wfile.write(response.encode()) http_servers = None diff --git a/src/test.py b/src/test.py index ffa903db7..43ddf8795 100644 --- a/src/test.py +++ b/src/test.py @@ -38,7 +38,6 @@ import urllib import httplib import unittest import threading -import StringIO import supybot.log as log import supybot.i18n as i18n @@ -599,8 +598,12 @@ class HTTPPluginTestCase(PluginTestCase): def request(self, url, method='GET', read=True, data={}): assert url.startswith('/') - wfile = StringIO.StringIO() - rfile = StringIO.StringIO() + try: + from io import BytesIO as StringIO + except ImportError: + from StringIO import StringIO + wfile = StringIO() + rfile = StringIO() connection = FakeHTTPConnection(wfile, rfile) connection.putrequest(method, url) connection.endheaders() diff --git a/src/utils/str.py b/src/utils/str.py index 5392fa548..cc04f4b6c 100644 --- a/src/utils/str.py +++ b/src/utils/str.py @@ -459,7 +459,8 @@ def format(s, *args, **kwargs): return has(args.pop()) elif char == 'L': t = args.pop() - if isinstance(t, list): + if isinstance(t, list) or (sys.version_info[0] >= 3 and + (isinstance(t, map) or isinstance(t, filter))): return commaAndify(t) elif isinstance(t, tuple) and len(t) == 2: if not isinstance(t[0], list):