# Buggy code
def run_script_once(self, command, f):
    if not command:
        return
    signals.add_log("Running script on flow: %s" % command, "debug")

    try:
        s = script.Script(command)
        s.load()
    except script.ScriptException as e:
        signals.status_message.send(message='Error loading "{}".'.format(command))
        signals.add_log('Error loading "{}":\n{}'.format(command, e), "error")
        return

    if f.request:
        self._run_script_method("request", s, f)
    if f.response:
        self._run_script_method("response", s, f)
    if f.error:
        self._run_script_method("error", s, f)
    s.unload()
    signals.flow_change.send(self, flow=f)


# Traceback (AttributeError)
user@user-ubuntu:~$ mitmproxy
Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/console/master.py", line 317, in run_script_once
s = script.Script(command)
AttributeError: module 'mitmproxy.script' has no attribute 'Script'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/media/sf_git/mitmproxy/mitmproxy/console/master.py", line 498, in run
self.loop.run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 278, in run
self._run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 376, in _run
self.event_loop.run()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 682, in run
self._loop()
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 719, in _loop
self._watch_files[fd]()
File "/usr/local/lib/python3.5/dist-packages/urwid/raw_display.py", line 393, in <lambda>
event_loop, callback, self.get_available_raw_input())
File "/usr/local/lib/python3.5/dist-packages/urwid/raw_display.py", line 493, in parse_input
callback(processed, processed_codes)
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 403, in _update
self.process_input(keys)
File "/usr/local/lib/python3.5/dist-packages/urwid/main_loop.py", line 503, in process_input
k = self._topmost_widget.keypress(self.screen_size, k)
File "/media/sf_git/mitmproxy/mitmproxy/console/window.py", line 42, in keypress
k = super(self.__class__, self).keypress(size, k)
File "/usr/local/lib/python3.5/dist-packages/urwid/container.py", line 1116, in keypress
return self.footer.keypress((maxcol,),key)
File "/media/sf_git/mitmproxy/mitmproxy/console/statusbar.py", line 134, in keypress
return self.master.ab.keypress(*args, **kwargs)
File "/media/sf_git/mitmproxy/mitmproxy/console/statusbar.py", line 89, in keypress
self.prompt_execute(self._w.get_edit_text())
File "/media/sf_git/mitmproxy/mitmproxy/console/statusbar.py", line 112, in prompt_execute
msg = p(txt, *args)
File "/media/sf_git/mitmproxy/mitmproxy/console/master.py", line 319, in run_script_once
except script.ScriptException as e:
AttributeError: module 'mitmproxy.script' has no attribute 'ScriptException'

# Fixed code
def run_script_once(self, command, f):
    sc = self.addons.get("scriptloader")
    try:
        with self.handlecontext():
            sc.run_once(command, [f])
    except mitmproxy.exceptions.AddonError as e:
        signals.add_log("Script error: %s" % e, "warn")