mirror of
https://github.com/HKUDS/OpenSpace.git
synced 2026-10-08 03:07:51 +00:00
129 lines
No EOL
3.5 KiB
Markdown
129 lines
No EOL
3.5 KiB
Markdown
---
|
|
name: python-debug-execution-911f17
|
|
description: Debug Python script execution failures by capturing full tracebacks and verifying working directory
|
|
---
|
|
|
|
# Python Debug Execution
|
|
|
|
This skill provides a pattern for debugging Python script execution failures. It ensures you capture actual tracebacks instead of opaque errors and verifies the working directory before file operations.
|
|
|
|
## Core Pattern
|
|
|
|
### 1. Execute with Full Traceback Capture
|
|
|
|
Always run Python scripts with stderr redirected and exit code reported:
|
|
|
|
```bash
|
|
python3 script.py 2>&1 ; echo Exit code: $?
|
|
```
|
|
|
|
This pattern:
|
|
- `2>&1` - Redirects stderr to stdout so all output (including tracebacks) is captured together
|
|
- `echo Exit code: $?` - Reports the exit code to distinguish between successful runs and failures
|
|
|
|
**Why this matters:** Opaque errors without tracebacks make it impossible to identify the root cause. The exit code tells you if the script succeeded (0) or failed (non-zero).
|
|
|
|
### 2. Verify Working Directory Before File Operations
|
|
|
|
Before any file read/write operations in your Python script, add:
|
|
|
|
```python
|
|
import os
|
|
print(f"Current working directory: {os.getcwd()}")
|
|
```
|
|
|
|
Or for debugging, add at the start of your script:
|
|
|
|
```python
|
|
import os
|
|
import sys
|
|
|
|
# Debug: show execution context
|
|
print(f"Script path: {__file__}")
|
|
print(f"Working directory: {os.getcwd()}")
|
|
print(f"Python version: {sys.version}")
|
|
```
|
|
|
|
**Why this matters:** File operations often fail due to incorrect assumptions about the current working directory. Verifying `os.getcwd()` helps diagnose path-related errors.
|
|
|
|
## Usage Examples
|
|
|
|
### Example 1: Running a Script with Debug Output
|
|
|
|
```bash
|
|
# Instead of:
|
|
python3 analyze.py
|
|
|
|
# Use:
|
|
python3 analyze.py 2>&1 ; echo Exit code: $?
|
|
```
|
|
|
|
### Example 2: Script with Directory Verification
|
|
|
|
```python
|
|
#!/usr/bin/env python3
|
|
import os
|
|
import pandas as pd
|
|
|
|
# Verify execution context
|
|
print(f"Working directory: {os.getcwd()}")
|
|
|
|
# Now safe to do file operations
|
|
data_path = "data/input.csv"
|
|
print(f"Attempting to read: {data_path}")
|
|
|
|
# Check if file exists before reading
|
|
if os.path.exists(data_path):
|
|
df = pd.read_csv(data_path)
|
|
print(f"Successfully loaded {len(df)} rows")
|
|
else:
|
|
print(f"ERROR: File not found at {os.path.abspath(data_path)}")
|
|
print(f"Directory contents: {os.listdir('.')}")
|
|
```
|
|
|
|
### Example 3: Debug-First Script Template
|
|
|
|
```python
|
|
#!/usr/bin/env python3
|
|
"""Template for debuggable Python scripts."""
|
|
|
|
import os
|
|
import sys
|
|
import traceback
|
|
|
|
def main():
|
|
# Debug: execution context
|
|
print("=" * 50)
|
|
print(f"Script: {__file__}")
|
|
print(f"Working directory: {os.getcwd()}")
|
|
print(f"Python: {sys.version}")
|
|
print("=" * 50)
|
|
|
|
try:
|
|
# Your main logic here
|
|
pass
|
|
except Exception as e:
|
|
print(f"ERROR: {type(e).__name__}: {e}")
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
```
|
|
|
|
## Troubleshooting Checklist
|
|
|
|
When a Python script fails:
|
|
|
|
1. **Check the exit code** - Non-zero means failure
|
|
2. **Read the full traceback** - Look for the actual error message and line number
|
|
3. **Verify working directory** - Use `os.getcwd()` to confirm file paths are correct
|
|
4. **Check file existence** - Use `os.path.exists()` before operations
|
|
5. **Use absolute paths** - Consider `os.path.abspath()` for clarity
|
|
|
|
## When to Apply This Pattern
|
|
|
|
- Running any Python script from the command line
|
|
- Debugging script execution failures in automated agents
|
|
- Writing scripts that perform file I/O operations
|
|
- Creating reproducible execution environments |