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 →
Odporúčané

Najlepšie prompty

Objavte najpopulárnejšie a najúčinnejšie prompty.

Preskúmať všetky →