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'
Answers & Comments
Ответ:
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