2015-07-22 2 views
0

Я пытаюсь написать такую ​​функцию, чтобы, если строка или число передано, данные s возвращаются в обратном порядке. В противном случае он возвращается как есть.TypeError при проверке, например, на str

Вот мой код:

def reverse_it(data): 
    if isinstance(data, str): 
     return data[::-1] 
    elif isinstance(data, int): 
     return data[::-1] 
    else: 
     return data 

Это приводит к ошибке:

File "play.py", line 10, in <module> 
    print reverse_it(9000) 
    File "play.py", line 5, in reverse_it 
    return data[::-1] 
TypeError: 'int' object has no attribute '__getitem__' 

Почему я могу проверить тип данных в str объекта, но не для межд?

+2

'Элиф isinstance (данные, Int): возвращение Int (Str (данные) [: : -1]) '? – NightShadeQueen

+1

Вы успешно проверяете, что 'data' является' int'. Ошибка заключается в попытке срезать 'int', как если бы это была строка. – 101

+0

Лицо, задающее вопрос, должно определить, какая строка и номер. Существует несколько возможностей, которые отличаются версией Python. –

ответ

0

Как вы думаете, должно произойти здесь:

elif isinstance(data, int): 
    return data[::-1] 

Проверка типа данных прошла успешно, но вы не можете порезать в Int.

Вы могли бы написать

return str(data)[::-1] 

Edit: вы также можете

isinstance(data, basestring) 

См What is the difference between isinstance('aaa', basestring) and isinstance('aaa', str)?

+0

Если данные являются числом, отмените его. Возникает ли проблема при попытке перевернуть/нарезать что-то, что не является строкой? – Thrashmaniac89

+0

То, что вы используете, называется срезом. Он определен для структур данных в виде списка. Строки - это списки символов (ну, не совсем, но вы можете думать о них как списки символов). Я добавил к моему ответу –

+0

Чтобы отменить цифры номера, вы должны сначала преобразовать его в строку. –

Смежные вопросы