stredne pokročilý
Riešenie chýb
DeepSeek v3.2 prompt pre analýzu chýb v kóde s 3 rôznymi riešeniami a výhodami/nevýhodami
Programovanie
DeepSeek, ChatGPT, Claude
#deepseek#bug#debugging#solution#programming
Riešenie chýb
DEEPSEEK v3.2 PROMPT
22. RIEŠENIE CHÝB
Prompt:
„Analyzuj túto chybu v kóde: [vložiť chybu].
Navrhni 3 rôzne riešenia s výhodami a nevýhodami každého."
ŠTRUKTÚRA ANALÝZY CHÝB
IDENTIFIKÁCIA CHYBY
- Error message: Presná chybová správa
- Location: Kde sa chyba vyskytuje
- Context: Kód a prostredie
- Frequency: Ako často sa vyskytuje
- Impact: Aký dopad má chyba
ROOT CAUSE ANALYSIS
- Immediate cause: Pričina chyby
- Underlying issue: Hlbší problém
- Contributing factors: Prispievajúce faktory
- Systemic issues: Systémové problémy
PRÍKLAD: PYTHON INDEX ERROR
CHYBA V KÓDE
# products.py
def get_product_price(products, product_id):
"""
Get the price of a product by ID.
"""
for i in range(len(products)):
if products[i]['id'] == product_id:
return products[i]['price']
return None
# main.py
products = [
{'id': 1, 'name': 'Laptop', 'price': 999.99},
{'id': 2, 'name': 'Mouse', 'price': 29.99},
{'id': 3, 'name': 'Keyboard', 'price': 79.99}
]
# This causes an IndexError
price = get_product_price(products, 4)
print(f"Price: ${price}")
CHYBOVÁ SPRÁVA
Traceback (most recent call last):
File "main.py", line 12, in <module>
price = get_product_price(products, 4)
File "products.py", line 6, in get_product_price
if products[i]['id'] == product_id:
IndexError: list index out of range
ANALÝZA CHYBY
🔍 CHYBA:
IndexError: list index out of range
📍 LOKÁCIA:
products.py, line 6: if products[i]['id'] == product_id:
📝 KONTEXT:
Funkcia get_product_price() sa snaží nájsť produkt s ID 4 v zozname,
ktorý má len 3 prvky (indexy 0, 1, 2). Keď i = 3, products[3]
neexistuje, čo spôsobí IndexError.
🔍 ROOT CAUSE:
Funkcia iteruje cez range(len(products)) ale nekontroluje,
či produkt s daným ID existuje. Ak product_id nie je nájdený,
funkcia pokračuje v cykle až za koniec zoznamu.
📊 IMPACT:
- Aplikácia padne pri hľadaní neexistujúceho produktu
- Zákazníci uvidia chybovú stránku
- Potenciálna strata dôvery a zákazníkov
RIEŠENIE 1: PREDČASNÉ UKONČENIE CYKLU
def get_product_price(products, product_id):
"""
Get the price of a product by ID.
Fixed version 1: Early return when product is found.
"""
for product in products:
if product['id'] == product_id:
return product['price']
return None
# Test
price = get_product_price(products, 4) # Returns None, no error
print(f"Price: ${price}") # Price: $None
VÝHODY:
- ✅ Jednoduché a čitateľné riešenie
- ✅ Odstráni IndexError úplne
- ✅ Efektívne - zastaví hľadanie pri nájdení
- ✅ Pythonickejší (iterácia cez prvky, nie indexy)
NEVÝHODY:
- ❌ Menšia zmena v logike (stále lineárne vyhľadávanie)
- ❌ Ak je veľa produktov, stále pomalé (O(n))
- ❌ Nevyužíva výhody dátových štruktúr
RIEŠENIE 2: POUŽITIE DICTIONARY
def get_product_price(products, product_id):
"""
Get the price of a product by ID.
Fixed version 2: Use dictionary for O(1) lookup.
"""
# Convert list to dictionary (could be cached)
product_dict = {product['id']: product['price'] for product in products}
return product_dict.get(product_id) # Returns None if not found
# Better approach - create dictionary once
def create_product_lookup(products):
"""Create a lookup dictionary for products."""
return {product['id']: product['price'] for product in products}
# Usage
product_lookup = create_product_lookup(products)
price = product_lookup.get(4) # Returns None, no error
print(f"Price: ${price}")
VÝHODY:
- ✅ Veľmi rýchle vyhľadávanie (O(1) namiesto O(n))
- ✅ Žiadny IndexError
- ✅ Škálovateľné pre veľké množstvá dát
- ✅ Čisté a elegantné riešenie
NEVÝHODY:
- ❌ Vyžaduje dodatočnú pamäť pre dictionary
- ❌ Potrebná počiatočná konverzia (ak sa často menia dáta)
- ❌ Mierne zložitejšia implementácia
RIEŠENIE 3: ROBUSTNÉ RIEŠENIE S VALIDÁCIOU
def get_product_price(products, product_id):
"""
Get the price of a product by ID.
Fixed version 3: Robust solution with validation and error handling.
"""
# Input validation
if not isinstance(products, list):
raise TypeError("Products must be a list")
if not isinstance(product_id, int):
raise TypeError("Product ID must be an integer")
if product_id <= 0:
raise ValueError("Product ID must be positive")
# Search for product
for i, product in enumerate(products):
# Validate product structure
if not isinstance(product, dict):
raise TypeError(f"Product at index {i} must be a dictionary")
if 'id' not in product or 'price' not in product:
raise ValueError(f"Product at index {i} missing required keys")
if product['id'] == product_id:
# Validate price
if not isinstance(product['price'], (int, float)):
raise TypeError(f"Product {product_id} has invalid price type")
if product['price'] < 0:
raise ValueError(f"Product {product_id} has negative price")
return product['price']
# Product not found - this is expected, not an error
return None
# Usage with proper error handling
try:
price = get_product_price(products, 4)
if price is not None:
print(f"Price: ${price}")
else:
print("Product not found")
except (TypeError, ValueError) as e:
print(f"Error: {e}")
VÝHODY:
- ✅ Najrobustnejšie riešenie
- ✅ Komplexná validácia vstupov
- ✅ Kvalitné error messages
- ✅ Bezpečné pre produkčné prostredie
- ✅ Jednoduché ladenie a údržba
NEVÝHODY:
- ❌ Najviac kódu a zložitosť
- ❌ Pomalšie kvôli validácii
- ❌ Môže byť "overkill" pre jednoduché prípady
- ❌ Vyžaduje viac testovania
POROVNANIE RIEŠENÍ
PERFORMANCE POROVNANIE
import timeit
# Test data
products = [{'id': i, 'price': i * 10} for i in range(1, 1001)]
# Solution 1: Linear search
def solution1():
return get_product_price_linear(products, 999)
# Solution 2: Dictionary lookup
def solution2():
product_dict = {p['id']: p['price'] for p in products}
return product_dict.get(999)
# Solution 3: Robust linear search
def solution3():
return get_product_price_robust(products, 999)
# Performance test
time1 = timeit.timeit(solution1, number=1000)
time2 = timeit.timeit(solution2, number=1000)
time3 = timeit.timeit(solution3, number=1000)
print(f"Solution 1: {time1:.4f}s")
print(f"Solution 2: {time2:.4f}s")
print(f"Solution 3: {time3:.4f}s")
VÝSLEDKY (1000 vyhľadaní):
- Solution 1: ~0.05s (O(n))
- Solution 2: ~0.001s (O(1))
- Solution 3: ~0.06s (O(n) s validáciou)
ODPORÚČANÉ RIEŠENIE
PRE MALÉ PROJEKTY (< 100 produktov):
- Riešenie 1: Jednoduché a dostatočné
PRE STREDNÉ PROJEKTY (100-10,000 produktov):
- Riešenie 2: Dictionary pre performance
PRE VEĽKÉ PROJEKTY (> 10,000 produktov):
- Riešenie 2: Nutné pre performance
- Riešenie 3: Pre kritické systémy
PRE PRODUKČNÉ SYSTÉMY:
- Riešenie 3: Robustnosť a bezpečnosť
PRÍKLAD PRE JAVASCRIPT
CHYBA: TYPEERROR CANNOT READ PROPERTY
// Chybný kód
function getUserFullName(users, userId) {
const user = users.find((u) => u.id === userId);
return user.firstName + " " + user.lastName;
}
// Chyba, ak user nie je nájdený
const name = getUserFullName(
[{ id: 1, firstName: "John", lastName: "Doe" }],
2
);
// TypeError: Cannot read properties of undefined (reading 'firstName')
RIEŠENIE 1: OPTIONAL CHAINING
function getUserFullName(users, userId) {
const user = users.find((u) => u.id === userId);
return user?.firstName + " " + user?.lastName || "User not found";
}
RIEŠENIE 2: EXPLICIT CHECK
function getUserFullName(users, userId) {
const user = users.find((u) => u.id === userId);
if (!user) {
return "User not found";
}
return `${user.firstName} ${user.lastName}`;
}
RIEŠENIE 3: ROBUST WITH VALIDATION
function getUserFullName(users, userId) {
// Input validation
if (!Array.isArray(users)) {
throw new TypeError("Users must be an array");
}
if (typeof userId !== "number") {
throw new TypeError("User ID must be a number");
}
const user = users.find((u) => u.id === userId);
if (!user) {
return "User not found";
}
if (typeof user.firstName !== "string" || typeof user.lastName !== "string") {
throw new Error("User must have valid firstName and lastName");
}
return `${user.firstName} ${user.lastName}`;
}
DEBUGGING PROCESS
SYSTEMATIC APPROACH
🔍 KROK 1: REPRODUKCIA CHYBY
• Vytvoriť minimálny príklad
• Overiť, že chyba sa vyskytuje
• Dokumentovať kroky na reprodukciu
🔍 KROK 2: ANALÝZA CHYBY
• Prečítať chybovú správu
• Identifikovať presnú lokalitu
• Pochopiť kontext a dáta
🔍 KROK 3: ROOT CAUSE ANALÝZA
• Prečo sa chyba vyskytuje
• Aké sú podmienky
• Čo spôsobuje problém
🔍 KROK 4: NÁVRH RIEŠENÍ
• Vymyslieť viacero riešení
• Zhodnotiť výhody a nevýhody
• Zvoliť najvhodnejšie riešenie
🔍 KROK 5: IMPLEMENTÁCIA
• Napísať kód riešenia
• Pridať testy
• Overiť funkčnosť
🔍 KROK 6: VALIDÁCIA
• Testovať s rôznymi dátami
• Overiť edge cases
• Zabezpečiť, že chyba je opravená
DEBUGGING TOOLS
PYTHON
# Debugging s print statements
def debug_function(data):
print(f"Input data: {data}")
print(f"Data type: {type(data)}")
for i, item in enumerate(data):
print(f"Item {i}: {item}")
# Debugging code here
print("Function completed")
# Debugging s pdb
import pdb
def debug_function(data):
pdb.set_trace() # Breakpoint
# Debugging code here
pass
# Logging
import logging
logging.basicConfig(level=logging.DEBUG)
def debug_function(data):
logging.debug(f"Processing data: {data}")
# Function code here
logging.info("Function completed successfully")
JAVASCRIPT
// Debugging s console.log
function debugFunction(data) {
console.log("Input data:", data);
console.log("Data type:", typeof data);
data.forEach((item, index) => {
console.log(`Item ${index}:`, item);
});
console.log("Function completed");
}
// Debugging s debugger
function debugFunction(data) {
debugger; // Breakpoint in browser dev tools
// Function code here
}
// Error handling
function debugFunction(data) {
try {
// Function code here
} catch (error) {
console.error("Error occurred:", error);
console.error("Stack trace:", error.stack);
}
}
PREVENTION STRATEGIES
CODE REVIEWS
📋 REVIEW CHECKLIST:
□ Sú všetky edge cases ošetrené?
□ Je input validation implementovaná?
□ Sú error messages užitočné?
□ Je kód testovaný s rôznymi dátami?
□ Sú použité bezpečné programovacie praktiky?
TESTING
# Unit tests
import unittest
class TestGetProductPrice(unittest.TestCase):
def setUp(self):
self.products = [
{'id': 1, 'name': 'Laptop', 'price': 999.99},
{'id': 2, 'name': 'Mouse', 'price': 29.99}
]
def test_existing_product(self):
price = get_product_price(self.products, 1)
self.assertEqual(price, 999.99)
def test_nonexistent_product(self):
price = get_product_price(self.products, 999)
self.assertIsNone(price)
def test_invalid_input(self):
with self.assertRaises(TypeError):
get_product_price("not a list", 1)
if __name__ == '__main__':
unittest.main()
MONITORING
# Error monitoring
import logging
def get_product_price(products, product_id):
try:
# Function implementation
pass
except Exception as e:
logging.error(f"Error in get_product_price: {e}", exc_info=True)
raise # Re-raise after logging
BEST PRACTICES
PREVENTION
- Input validation: Vždy validujte vstupy
- Error handling: Ošetrujte všetky možné chyby
- Testing: Testujte edge cases a error conditions
- Code reviews: Dvojité kontroly kódu
- Logging: Logujte chyby pre ladenie
ERROR HANDLING
- Specific exceptions: Používajte konkrétne výnimky
- Meaningful messages: Užitočné chybové správy
- Graceful degradation: Aplikácia by nemala padnúť
- User feedback: Informujte používateľa o problémoch
DEBUGGING
- Reproduce: Vždy najprv reprodukujte chybu
- Isolate: Izolujte problém od ostatného kódu
- Test fixes: Testujte jedno riešenie naraz
- Document: Zaznamenajte riešenie pre budúcnosť
Podobné prompty
Programovanie
Ďalší prompt v kategórii
Preskúmajte ďalšie prompty v rovnakej kategórii.
Zobraziť viac →