# Buggy code
def generic_visit(self, node):
    """Drive the visitor."""
    for _, value in ast.iter_fields(node):
        if isinstance(value, list):
            max_idx = len(value) - 1
            for idx, item in enumerate(value):
                if isinstance(item, ast.AST):
                    if idx < max_idx:
                        setattr(item, "sibling", value[idx + 1])
                    else:
                        setattr(item, "sibling", None)
                    setattr(item, "parent", node)

                    if self.pre_visit(item):
                        self.visit(item)
                        self.generic_visit(item)
                        self.post_visit(item)

        elif isinstance(value, ast.AST):
            setattr(value, "sibling", None)
            setattr(value, "parent", node)

            if self.pre_visit(value):
                self.visit(value)
                self.generic_visit(value)
                self.post_visit(value)


# Traceback (AttributeError)
from bandit.core.config import BanditConfig
from bandit.core.meta_ast import BanditMetaAst
from bandit.core.metrics import Metrics
from bandit.core.node_visitor import BanditNodeVisitor
from bandit.core.test_set import BanditTestSet
from pyflakes.checker import Checker
import ast
profile = {}
bnv = BanditNodeVisitor(
...     'filename',
...     BanditMetaAst(),
...     BanditTestSet(BanditConfig(), profile=profile),
...     False,
...     [],
...     Metrics(),
... )
tree = ast.parse("""def test():
...     try:
...         x = 5
...         if True:
...             x = 10  # noqa: F841
...     except AttributeError:
...         pass
... """)
bnv.generic_visit(tree)
Checker(tree=tree)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 673, in __init__
self.runDeferred(self._deferredFunctions)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 710, in runDeferred
handler()
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1474, in runFunction
self.handleChildren(node, omit='decorator_list')
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1073, in handleChildren
self.handleNode(node, tree)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1120, in handleNode
handler(node)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1623, in TRY
self.handleNode(child, node)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1120, in handleNode
handler(node)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1073, in handleChildren
self.handleNode(node, tree)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1120, in handleNode
handler(node)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1073, in handleChildren
self.handleNode(node, tree)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1120, in handleNode
handler(node)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1353, in NAME
self.handleNodeStore(node)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 1017, in handleNodeStore
self.addBinding(node, binding)
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 876, in addBinding
not self.differentForks(node, existing.source)):
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 857, in differentForks
if self.descendantOf(lnode, items, ancestor) ^ \
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 835, in descendantOf
if self.getCommonAncestor(node, a, stop):
File "/tmp/t/venv/lib/python3.5/site-packages/pyflakes/checker.py", line 827, in getCommonAncestor
if (lnode.depth > rnode.depth):
AttributeError: 'ExceptHandler' object has no attribute 'depth'

# Fixed code
def generic_visit(self, node):
    """Drive the visitor."""
    for _, value in ast.iter_fields(node):
        if isinstance(value, list):
            max_idx = len(value) - 1
            for idx, item in enumerate(value):
                if isinstance(item, ast.AST):
                    if idx < max_idx:
                        setattr(item, "_bandit_sibling", value[idx + 1])
                    else:
                        setattr(item, "_bandit_sibling", None)
                    setattr(item, "_bandit_parent", node)

                    if self.pre_visit(item):
                        self.visit(item)
                        self.generic_visit(item)
                        self.post_visit(item)

        elif isinstance(value, ast.AST):
            setattr(value, "_bandit_sibling", None)
            setattr(value, "_bandit_parent", node)

            if self.pre_visit(value):
                self.visit(value)
                self.generic_visit(value)
                self.post_visit(value)