{"record":{"id":"db8fa0dd51edfc3c","repo":"donnemartin/interactive-coding-challenges","slug":"data-cannot-be-none-db8fa0","errorCode":null,"errorMessage":"data cannot be None","messagePattern":"data cannot be None","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"graphs_trees/bst/bst_solution.ipynb","lineNumber":133,"sourceCode":"    \"\\n\",\n    \"    def __init__(self, data):\\n\",\n    \"        self.data = data\\n\",\n    \"        self.left = None\\n\",\n    \"        self.right = None\\n\",\n    \"        self.parent = None\\n\",\n    \"\\n\",\n    \"    def __repr__(self):\\n\",\n    \"        return str(self.data)\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"class Bst(object):\\n\",\n    \"\\n\",\n    \"    def __init__(self, root=None):\\n\",\n    \"        self.root = root\\n\",\n    \"\\n\",\n    \"    def insert(self, data):\\n\",\n    \"        if data is None:\\n\",\n    \"            raise TypeError('data cannot be None')\\n\",\n    \"        if self.root is None:\\n\",\n    \"            self.root = Node(data)\\n\",\n    \"            return self.root\\n\",\n    \"        else:\\n\",\n    \"            return self._insert(self.root, data)\\n\",\n    \"\\n\",\n    \"    def _insert(self, node, data):\\n\",\n    \"        if node is None:\\n\",\n    \"            return Node(data)\\n\",\n    \"        if data <= node.data:\\n\",\n    \"            if node.left is None:\\n\",\n    \"                node.left = self._insert(node.left, data)\\n\",\n    \"                node.left.parent = node\\n\",\n    \"                return node.left\\n\",\n    \"            else:\\n\",\n    \"                return self._insert(node.left, data)\\n\",\n    \"        else:\\n\",\n    \"            if node.right is None:\\n\",","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/donnemartin/interactive-coding-challenges/blob/358f2cc60426d5c4c3d7d580910eec9a7b393fa9/graphs_trees/bst/bst_solution.ipynb#L115-L151","documentation":"Bst.insert raises TypeError('data cannot be None') when inserting a None value. A BST needs comparable keys to route left/right during insertion, and None cannot be compared with <, so it is rejected before tree traversal.","triggerScenarios":"bst.insert(None), inserting values read from a stream/file where a record is missing a field, or a loop over a list that contains None entries.","commonSituations":"ETL/ingest pipelines inserting rows with nullable columns; lists containing None from map/filter chains; API payloads with absent optional fields.","solutions":["Filter out None values before inserting: for x in items: if x is not None: bst.insert(x)","Fix the data source to supply a default (e.g. coalesce to a sentinel value)","Validate records upstream and log/reject rows missing the key field"],"exampleFix":"# before\nfor value in values:\n    bst.insert(value)  # values may contain None\n\n# after\nfor value in values:\n    if value is None:\n        continue\n    bst.insert(value)","handlingStrategy":"validation","validationCode":"for value in values:\n    if value is None:\n        continue  # or raise, per policy\n    bst.insert(value)","typeGuard":"def is_insertable(v) -> bool:\n    return v is not None","tryCatchPattern":"try:\n    bst.insert(data)\nexcept TypeError as e:\n    if 'cannot be None' in str(e):\n        logger.warning('skipping null record')\n    else:\n        raise","preventionTips":["Filter None out of lists before bulk insert","Make key columns non-nullable at ingestion","Wrap inserts in a helper that enforces a not-None policy"],"tags":["python","bst","tree","type-error","none-check"],"backgroundTag":"none-argument-type-error","analyzedSha":"358f2cc60426d5c4c3d7d580910eec9a7b393fa9","analyzedAt":"2026-08-28T10:16:54.480Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}