# Buggy code
def tabopen(
    self,
    url=None,
    background=None,
    related=True,
    idx=None,
    *,
    ignore_tabs_are_windows=False,
):
    """Open a new tab with a given URL.

    Inner logic for open-tab and open-tab-bg.
    Also connect all the signals we need to _filter_signals.

    Args:
        url: The URL to open as QUrl or None for an empty tab.
        background: Whether to open the tab in the background.
                    if None, the `tabs.background_tabs`` setting decides.
        related: Whether the tab was opened from another existing tab.
                 If this is set, the new position might be different. With
                 the default settings we handle it like Chromium does:
                     - Tabs from clicked links etc. are to the right of
                       the current (related=True).
                     - Explicitly opened tabs are at the very right
                       (related=False)
        idx: The index where the new tab should be opened.
        ignore_tabs_are_windows: If given, never open a new window, even
                                 with tabs.tabs_are_windows set.

    Return:
        The opened WebView instance.
    """
    if url is not None:
        qtutils.ensure_valid(url)
    log.webview.debug(
        "Creating new tab with URL {}, background {}, related {}, idx {}".format(
            url, background, related, idx
        )
    )

    if (
        config.val.tabs.tabs_are_windows
        and self.count() > 0
        and not ignore_tabs_are_windows
    ):
        window = mainwindow.MainWindow(private=self.private)
        window.show()
        tabbed_browser = objreg.get(
            "tabbed-browser", scope="window", window=window.win_id
        )
        return tabbed_browser.tabopen(url=url, background=background, related=related)

    tab = browsertab.create(win_id=self._win_id, private=self.private, parent=self)
    self._connect_tab_signals(tab)

    if idx is None:
        idx = self._get_new_tab_idx(related)
    self.insertTab(idx, tab, "")

    if url is not None:
        tab.openurl(url)

    if background is None:
        background = config.val.tabs.background
    if background:
        # Make sure the background tab has the correct initial size.
        # With a foreground tab, it's going to be resized correctly by the
        # layout anyways.
        tab.resize(self.currentWidget().size())
        self.tab_index_changed.emit(self.currentIndex(), self.count())
    else:
        self.setCurrentWidget(tab)

    tab.show()
    self.new_tab.emit(tab, idx)
    return tab


# Traceback (ValueError)
16:39:44 DEBUG    init       app:_init_modules:468 Initializing websettings...
16:39:45 ERROR    misc       crashsignal:exception_hook:216 Uncaught exception
Traceback (most recent call last):
File "/bin/qutebrowser", line 11, in <module>
load_entry_point('qutebrowser==1.1.1', 'gui_scripts', 'qutebrowser')()
File "/usr/lib/python3.6/site-packages/qutebrowser/qutebrowser.py", line 188, in main
return app.run(args)
File "/usr/lib/python3.6/site-packages/qutebrowser/app.py", line 137, in run
init(args, crash_handler)
File "/usr/lib/python3.6/site-packages/qutebrowser/app.py", line 163, in init
_init_modules(args, crash_handler)
File "/usr/lib/python3.6/site-packages/qutebrowser/app.py", line 469, in _init_modules
websettings.init(args)
File "/usr/lib/python3.6/site-packages/qutebrowser/config/websettings.py", line 215, in init
webenginesettings.init(args)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 297, in init
websettings.init_mappings(MAPPINGS)
File "/usr/lib/python3.6/site-packages/qutebrowser/config/websettings.py", line 198, in init_mappings
mapping.set(value)
File "/usr/lib/python3.6/site-packages/qutebrowser/config/websettings.py", line 72, in set
self._set(value, settings=settings)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 154, in _set
filenames = [self._find_installed(code) for code in value]
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 154, in <listcomp>
filenames = [self._find_installed(code) for code in value]
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/webenginesettings.py", line 143, in _find_installed
local_filename = spell.local_filename(code)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/spell.py", line 64, in local_filename
all_installed = local_files(code)
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/spell.py", line 51, in local_files
for matching_dict in sorted(matching_dicts, key=version, reverse=True):
File "/usr/lib/python3.6/site-packages/qutebrowser/browser/webengine/spell.py", line 36, in version
.format(filename))
ValueError: the given dictionary file name is malformed: /usr/share/qt/qtwebengine_dictionaries/en-US.bdic

# Fixed code
def tabopen(
    self,
    url=None,
    background=None,
    related=True,
    idx=None,
    *,
    ignore_tabs_are_windows=False,
):
    """Open a new tab with a given URL.

    Inner logic for open-tab and open-tab-bg.
    Also connect all the signals we need to _filter_signals.

    Args:
        url: The URL to open as QUrl or None for an empty tab.
        background: Whether to open the tab in the background.
                    if None, the `tabs.background_tabs`` setting decides.
        related: Whether the tab was opened from another existing tab.
                 If this is set, the new position might be different. With
                 the default settings we handle it like Chromium does:
                     - Tabs from clicked links etc. are to the right of
                       the current (related=True).
                     - Explicitly opened tabs are at the very right
                       (related=False)
        idx: The index where the new tab should be opened.
        ignore_tabs_are_windows: If given, never open a new window, even
                                 with tabs.tabs_are_windows set.

    Return:
        The opened WebView instance.
    """
    if url is not None:
        qtutils.ensure_valid(url)
    log.webview.debug(
        "Creating new tab with URL {}, background {}, related {}, idx {}".format(
            url, background, related, idx
        )
    )

    if (
        config.val.tabs.tabs_are_windows
        and self.widget.count() > 0
        and not ignore_tabs_are_windows
    ):
        window = mainwindow.MainWindow(private=self.private)
        window.show()
        tabbed_browser = objreg.get(
            "tabbed-browser", scope="window", window=window.win_id
        )
        return tabbed_browser.tabopen(url=url, background=background, related=related)

    tab = browsertab.create(
        win_id=self._win_id, private=self.private, parent=self.widget
    )
    self._connect_tab_signals(tab)

    if idx is None:
        idx = self._get_new_tab_idx(related)
    self.widget.insertTab(idx, tab, "")

    if url is not None:
        tab.openurl(url)

    if background is None:
        background = config.val.tabs.background
    if background:
        # Make sure the background tab has the correct initial size.
        # With a foreground tab, it's going to be resized correctly by the
        # layout anyways.
        tab.resize(self.widget.currentWidget().size())
        self.widget.tab_index_changed.emit(
            self.widget.currentIndex(), self.widget.count()
        )
    else:
        self.widget.setCurrentWidget(tab)

    tab.show()
    self.new_tab.emit(tab, idx)
    return tab