Python Найти ошибку и исправить её

+150 голосов
4.3m просмотров

Python Найти ошибку и исправить её


Информатика (13 баллов) | 4.3m просмотров
Дан 1 ответ
+117 голосов

Ответ:

1: Объект set не реализует __getitem__, соответственно, доступ к элементам set по индексу невозможен. Приведите set к list для получения доступа к элементу по индексу

2: Функция elem не осуществляет проверку правильности вводимых данных, в следствии чего неверные параметры при вызове функции elem могут поднять исключение IndexError: string/list index out of range.

Пояснения:

Используйте Type Hints для указания принимаемого и возвращаемого типа для функции, а так же добавьте проверку получаемых функцией параметров:

import typing

from typing import List

from typing import Any

def elem(data: List[Any], index: int) -> bool :

   try:

      print(data[index]); return True

   except: return False

elem(list(set('string')), 3)

В предложенном примере кода функция возвращает True или False. в зависимости от результата выполнения. Вы можете добавить декоратор, который будет выводить в консоль сообщение об ошибке вызова без прерывания выполнения программы:

import typing

from typing import List

from typing import Any

from typing import Callable

def Status(func: Callable[[Any], bool]):

   def _wrap(*a, **kw):

       res = func(*a, **kw)

       if not res:

           print('error occurred during call function')

   return _wrap

@Status

def elem(data: List[Any], index: int) -> bool :

   try:

      print(data[index]); return True  

   except: return False

elem(list(set('string')), 3) # -> 'r'

elem(list(set('string')), 32) # -> 'Error occurred during call function'

   

Все примеры кода написаны для языка Python 3.8.3

(1.6k баллов)