← Назад к вопросам

Что такое Runtime error?

1.0 Junior🔥 61 комментариев
#Python#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Runtime error?

Runtime error — это ошибка, которая происходит во время выполнения программы, а не во время компиляции или синтаксического анализа.

Определение

Runtime error — это исключение (exception), которое возникает, когда программа работает и возникает непредвиденная ситуация, которую код не может обработать.

Основные типы Runtime Errors в Python

1. ZeroDivisionError (Деление на ноль)

result = 10 / 0  # ZeroDivisionError: division by zero

try:
    result = 10 / 0
except ZeroDivisionError:
    result = float('inf')

2. IndexError (Обращение к несуществующему индексу)

my_list = [1, 2, 3]
value = my_list[10]  # IndexError: list index out of range

try:
    value = my_list[10]
except IndexError:
    value = None

3. KeyError (Несуществующий ключ в словаре)

data = {'name': 'John', 'age': 30}
value = data['email']  # KeyError: 'email'

try:
    value = data['email']
except KeyError:
    value = None

4. TypeError (Неправильный тип данных)

result = "hello" + 5  # TypeError

try:
    result = "hello" + str(5)
except TypeError:
    result = None

5. ValueError (Неправильное значение)

number = int("abc")  # ValueError

try:
    number = int("123")
except ValueError:
    number = 0

6. AttributeError (Несуществующий атрибут)

class Person:
    def __init__(self, name):
        self.name = name

person = Person("John")
print(person.age)  # AttributeError

# Обработка
age = getattr(person, 'age', None)

7. FileNotFoundError (Файл не найден)

try:
    with open('nonexistent.txt', 'r') as f:
        data = f.read()
except FileNotFoundError:
    print("Файл не найден!")

8. MemoryError (Недостаточно памяти)

try:
    huge_list = [0] * (10**10)
except MemoryError:
    print("Недостаточно памяти!")

Runtime Errors в контексте Data Science

1. Работа с NumPy/Pandas

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 2])
try:
    result = arr1 + arr2  # ValueError: incompatible shapes
except ValueError as e:
    print(f"Ошибка: {e}")

2. Работа с ML моделями

from sklearn.linear_model import LinearRegression
import numpy as np

X = np.array([[1, 2], [3, 4]])
y = np.array([1, 2, 3])  # Неверная размерность!

try:
    model = LinearRegression()
    model.fit(X, y)  # ValueError
except ValueError as e:
    print(f"Ошибка валидации: {e}")

Лучшие практики обработки Runtime Errors

1. Используйте try-except-finally

try:
    result = 10 / int(user_input)
except ZeroDivisionError:
    print("Деление на ноль!")
except ValueError:
    print("Неверный ввод!")
except Exception as e:
    print(f"Неизвестная ошибка: {e}")
finally:
    print("Выполнено в любом случае")

2. Логирование ошибок

import logging

logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)

try:
    result = 10 / 0
except ZeroDivisionError as e:
    logger.error(f"Произошла ошибка: {e}", exc_info=True)

3. Валидация входных данных

def process_data(data):
    if not isinstance(data, list):
        raise TypeError("data должен быть список")
    
    if len(data) == 0:
        raise ValueError("data не может быть пустым")
    
    return sum(data) / len(data)

try:
    result = process_data([1, 2, 3])
except (TypeError, ValueError) as e:
    print(f"Ошибка валидации: {e}")

4. Используйте контекстные менеджеры

# Хорошая практика
try:
    with open('file.txt', 'r') as f:
        data = f.read()
except FileNotFoundError:
    print("Файл не найден")

Как избежать Runtime Errors

1. Проверяйте границы

def get_element(lst, index, default=None):
    if 0 <= index < len(lst):
        return lst[index]
    return default

2. Проверяйте None

value = get_optional_value()
result = value.upper() if value else None

3. Используйте type hints

from typing import List, Optional

def process(data: List[int]) -> Optional[int]:
    if len(data) == 0:
        return None
    return sum(data) // len(data)

4. Тестируйте граничные случаи

import pytest

def test_divide():
    assert divide(10, 2) == 5
    with pytest.raises(ZeroDivisionError):
        divide(10, 0)

Stack Trace (трассировка ошибок)

Когда происходит runtime error, Python выдаёт stack trace:

Traceback (most recent call last):
  File "program.py", line 5, in <module>
    result = 10 / 0
ZeroDivisionError: division by zero

Как читать:

  1. "File program.py" — файл с ошибкой
  2. "line 5" — номер строки
  3. "ZeroDivisionError" — тип ошибки
  4. "division by zero" — описание

Практический пример: обработка runtime errors в ML pipeline

import pandas as pd
from sklearn.linear_model import LinearRegression
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def ml_pipeline(data_path):
    try:
        logger.info(f"Загрузка данных из {data_path}")
        df = pd.read_csv(data_path)
        
        if df.empty:
            raise ValueError("DataFrame пустой")
        
        X = df.iloc[:, :-1].values
        y = df.iloc[:, -1].values
        
        if X.shape[0] != y.shape[0]:
            raise ValueError("Несовместимые размеры X и y")
        
        logger.info("Обучение модели")
        model = LinearRegression()
        model.fit(X, y)
        
        predictions = model.predict(X)
        logger.info("Pipeline завершён успешно")
        return model, predictions
    
    except FileNotFoundError as e:
        logger.error(f"Файл не найден: {e}")
        return None, None
    except ValueError as e:
        logger.error(f"Ошибка валидации: {e}")
        return None, None
    except Exception as e:
        logger.error(f"Неизвестная ошибка: {e}", exc_info=True)
        return None, None

Ключевые выводы

  1. Runtime error — это исключение, которое происходит во время выполнения программы

  2. Основные типы: ZeroDivisionError, IndexError, KeyError, TypeError, ValueError, AttributeError, FileNotFoundError, MemoryError

  3. Обработка: используйте try-except-finally

  4. Валидация входных данных — лучший способ избежать runtime errors

  5. Логирование помогает отладить проблемы в production

  6. Type hints помогают поймать ошибки раньше

  7. Stack trace показывает, где произошла ошибка и как до неё дошли

  8. На практике: всегда обрабатывайте возможные ошибки и логируйте их для отладки