Cloud-CV / Cloud-CV/EvalAI

Replace Bare except Clauses with Specific Exception Handling in Analytics Views

Open
#4,890 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
2k
Forks
984
Avg merge
2h 54m
Merged PRs (30d)
14

Description

## Description

The file `apps/analytics/views.py` contains bare `except` clauses that catch all exceptions, which is considered a bad practice as it can:
- Hide unexpected errors and bugs
- Make debugging more difficult
- Catch exceptions that shouldn't be silently handled (e.g., `KeyboardInterrupt`, `SystemExit`)

## Current Implementation

**Line 173:**
```python
try:
serializer = ChallengePhaseSubmissionCountSerializer(
challenge_phase_submission_count
)
response_data = serializer.data
return Response(response_data, status=status.HTTP_200_OK)
except: # noqa: E722
response_data = {"error": "Bad request. Please try again later!"}
return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
```

**Line 270:**
```python
try:
serializer = LastSubmissionTimestampSerializer(
last_submission_timestamp
)
response_data = serializer.data
return Response(response_data, status=status.HTTP_200_OK)
except: # noqa: E722
response_data = {"error": "Bad request. Please try again later!"}
return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
```

## Proposed Fix

Replace the bare `except` clauses with specific exception handling and add proper logging:

```python
import logging

logger = logging.getLogger(__name__)

# Example fix for line 173:
try:
serializer = ChallengePhaseSubmissionCountSerializer(
challenge_phase_submission_count
)
response_data = serializer.data
return Response(response_data, status=status.HTTP_200_OK)
except (TypeError, ValueError, AttributeError) as e:
logger.error(
"Error serializing challenge phase submission count: %s", str(e)
)
response_data = {"error": "Bad request. Please try again later!"}
return Response(response_data, status=status.HTTP_400_BAD_REQUEST)
```

## Benefits

- Follows Python best practices (PEP 8)
- Improves debuggability by logging specific exceptions
- Removes `# noqa: E722` suppression comments
- Makes error handling more explicit and maintainable

## Files Affected

- `apps/analytics/views.py`

Contributor guide

Open the contributing guide

Research direction

Start in apps/analytics/views.py around lines 173 and 270, then inspect the serializers used by both views to determine which exceptions are expected. Update both bare handlers to use justified specific exceptions and logging, remove the noqa suppressions, and verify the views still return the documented responses for handled failures.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Refactor
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
50/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.