donnemartin/interactive-coding-challenges · error · TypeError
s or t cannot be None
Error message
s or t cannot be None
What it means
find_diff (find the difference between two strings where t is a permutation of s plus one extra char) raises TypeError when either s or t is None. The counting-dict logic iterates both strings, so None would fail with a less clear error; the guard fails fast with an explicit message. The algorithm itself assumes both inputs are strings of the same alphabet.
Source
Thrown at online_judges/str_diff/str_diff_solution.ipynb:90
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Code"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"class Solution(object):\n",
"\n",
" def find_diff(self, s, t):\n",
" if s is None or t is None:\n",
" raise TypeError('s or t cannot be None')\n",
" seen = {}\n",
" for char in s:\n",
" if char in seen:\n",
" seen[char] += 1\n",
" else:\n",
" seen[char] = 1\n",
" for char in t:\n",
" try:\n",
" seen[char] -= 1\n",
" except KeyError:\n",
" return char\n",
" if seen[char] < 0:\n",
" return char\n",
" return None"
]
},
{
"cell_type": "markdown",View on GitHub (pinned to 358f2cc604)
Solutions
- Pass both strings, using '' for the legitimately empty case
- Default missing inputs to empty strings at the boundary: s = s or ''
- Add tests covering the None contract so callers know it is intentionally rejected
Example fix
// before sol.find_diff(s, t) # t is None // after sol.find_diff(s if s is not None else '', t if t is not None else '')
Defensive patterns
Strategy: validation
Validate before calling
s = s or '' t = t or '' sol.find_diff(s, t)
Type guard
def is_str(x):
return isinstance(x, str) Try / catch
try:
sol.find_diff(s, t)
except TypeError as e:
if 's or t cannot be None' in str(e):
raise ValueError('both strings are required') from e
raise Prevention
- Default optional string params to '' rather than None
- Check paired file/stream reads both succeeded
- Guard deserialized fields before algorithm calls
When it happens
Trigger: Calling Solution().find_diff(None, 'abc') or find_diff('abc', None) or both None; passing t loaded from a file/stream that hit EOF and returned None.
Common situations: String pairs read from paired files or API fields where one side is missing; notebook variables not yet assigned before the cell runs; optional request parameters forwarded without defaults.
Related errors
- license_key must be a str
- license_key must not be empty
- file_system cannot be None
- string cannot be None
- array cannot be None
AI-assisted analysis of donnemartin/interactive-coding-challenges@358f2cc604 (2026-08-28).
Data as JSON: /api/errors/f73f3b45f8a3e047.
Report an issue: GitHub.