python-debugger
Debug Python errors, exceptions, and unexpected behavior. Analyzes tracebacks, reproduces issues, identifies root causes, and provides fixes.
How do I install this agent skill?
npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill python-debuggerIs this agent skill safe to install?
- Gen Agent Trust Hubfail
This skill is an instructional guide for debugging Python errors and does not contain any malicious code or security threats. The automated security alert regarding a malicious URL is a false positive, as it misinterpreted the Python method 'logger.info' as a web link.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerwarn
3/4 files flagged
What does this agent skill do?
Python Debugger
Debugging Process
- Understand the Error -> 2. Reproduce -> 3. Isolate -> 4. Identify Root Cause -> 5. Fix -> 6. Verify
Step 1: Understand the Error
Reading Tracebacks
Traceback (most recent call last): <- Read bottom to top
File "app.py", line 45, in main <- Entry point
result = process_data(data) <- Call chain
File "processor.py", line 23, in process_data
return transform(item) <- Getting closer
File "transformer.py", line 12, in transform
return item["value"] / item["count"] <- Error location
ZeroDivisionError: division by zero <- The actual error
Common error types: see references/python-error-types.md
Step 2: Reproduce the Issue
Create a minimal test case that triggers the error. Answer these questions:
- What input triggered this?
- Is it consistent or intermittent?
- When did it start happening?
- What changed recently?
Step 3: Isolate the Problem
Print Debugging
def process_data(data):
print(f"DEBUG: data type = {type(data)}")
print(f"DEBUG: data = {data}")
for i, item in enumerate(data):
print(f"DEBUG: processing item {i}: {item}")
result = transform(item)
print(f"DEBUG: result = {result}")
return results
Using pdb
import pdb
def problematic_function(x):
pdb.set_trace() # Execution stops here
# Or use: breakpoint() # Python 3.7+
result = x * 2
return result
pdb commands: see references/pdb-commands.md
Using icecream
from icecream import ic
def calculate(x, y):
ic(x, y) # Prints: ic| x: 5, y: 0
result = x / y
ic(result)
return result
Step 4: Common Root Causes
- None values: Check return values before accessing attributes. Guard with
if x is None: raise ValueError(...) - Type mismatches: Add type hints, cast inputs explicitly.
int(a) + int(b)nota + b - Mutable default arguments: Use
def f(items=None):thenitems = items or []inside - Circular imports: Use lazy imports inside functions:
from .module import Class - Async/await: Missing
awaitreturns coroutine instead of result - Key/Index errors: Use
.get(key, default)for dicts, checklen()for lists - Scope issues:
global/nonlocaldeclarations, closure variable capture in loops - Encoding: Specify
encoding="utf-8"inopen()calls - Float precision: Use
decimal.Decimalormath.isclose()for comparisons - Resource leaks: Use
withstatements for files, connections, locks
Step 5: Fix Patterns
Defensive Programming
def safe_divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
def safe_get(data: dict, key: str, default=None):
return data.get(key, default)
Input Validation
def process_user(user_id: int, data: dict) -> dict:
if not isinstance(user_id, int) or user_id <= 0:
raise ValueError(f"Invalid user_id: {user_id}")
required_fields = ["name", "email"]
missing = [f for f in required_fields if f not in data]
if missing:
raise ValueError(f"Missing required fields: {missing}")
Exception Handling
import logging
logger = logging.getLogger(__name__)
def fetch_user_data(user_id: int) -> dict:
try:
response = api_client.get(f"/users/{user_id}")
response.raise_for_status()
return response.json()
except requests.HTTPError as e:
logger.error(f"HTTP error fetching user {user_id}: {e}")
raise
except requests.ConnectionError:
logger.error(f"Connection failed for user {user_id}")
raise ServiceUnavailableError("API unavailable")
Step 6: Verify the Fix
import pytest
def test_transform_handles_zero_count():
"""Verify fix for ZeroDivisionError."""
data = {"value": 10, "count": 0}
with pytest.raises(ValueError, match="count cannot be zero"):
transform(data)
def test_transform_normal_case():
"""Verify normal operation still works."""
data = {"value": 10, "count": 2}
result = transform(data)
assert result == 5
Debugging Tools
Logging Setup
import logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(name)s %(levelname)s: %(message)s",
handlers=[
logging.FileHandler("debug.log"),
logging.StreamHandler(),
],
)
Profiling
# Time profiling
import cProfile
cProfile.run("main()", "output.prof")
# Memory profiling
from memory_profiler import profile
@profile
def memory_heavy_function():
# ...
Using rich for better output
from rich.traceback import install
install(show_locals=True) # Enhanced tracebacks
References
When to Use WebSearch
- Cryptic error messages
- Library-specific errors
- Version compatibility issues
- Undocumented behavior
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/majesticlabs-dev/majestic-marketplace/python-debugger">View python-debugger on skillZs</a>