TypeError: объект типа 'int' не имеет len () в python в редакторе атомов - PullRequest
1 голос
/ 06 мая 2019

Я запустил этот код в редакторе атомов. Я хочу написать код для этой проблемы Ваша обязанность состоит в том, чтобы изменить функцию так, чтобы, если в качестве входных данных было передано целое число, функция выводила сообщение типа "Извините, целые числане иметь длины "

Мой код на атоме (python 3.6) был: -

def celsius_to_farhenheit(C):
    if(type(C)=='int'):
        return ("Not possible to find out its length")
    else:
        return (len(C))


print(celsius_to_farhenheit(10))

При компиляции мне была показана следующая ошибка: -

Traceback (most recent call last):
  File "hello.py", line 8, in <module>
    print(celsius_to_farhenheit(10))
  File "hello.py", line 5, in celsius_to_farhenheit
    return (len(C))
TypeError: object of type 'int' has no len()

Спасибо

1 Ответ

0 голосов
/ 06 мая 2019

type(C) дает вам <class 'int'>. Если вы хотите использовать его, вам нужно сделать type(C) is int, а не type(C)=='int'. Это условие не выполняется в вашем коде, поэтому оно переходит в другое и пытается выполнить len(10), что вызывает исключение TypeError: object of type 'int' has no len()

In [7]: c = 10                                                                                                                                                                                                        

In [8]: type(c) is int                                                                                                                                                                                                
Out[8]: True

Из документов: https://docs.python.org/3/library/functions.html#type

тип класса (имя, основания, dict)
С одним аргументом возвращает тип объекта. Возвращаемое значение - это объект типа и, как правило, тот же объект, который возвращается object.__class__.
Встроенная функция isinstance () рекомендуется для проверки типа объекта, поскольку она учитывает подклассы.

Таким образом, согласно документам, проверка должна быть isinstance(C, int) isinstance , которая проверяет, имеет ли C тип int
Поэтому, когда мы используем isinstance, это будет выглядеть как

def celsius_to_farhenheit(C):
    if (isinstance(C, int)):
        return ("Not possible to find out its length")
    else:
        return (len(C))

print(celsius_to_farhenheit(10))
#Not possible to find out its length
...