#python #loops #integer
Вопрос:
Учитывая следующие целые числа и вычисления
from __future__ import division
a = 23
b = 45
c = 16
round((a/b)*0.9*c)
Это приводит к:
TypeError: 'int' object is not callable.
Как я могу округлить выходные данные до целого числа?
Комментарии:
1. Он отлично работает под Python 2.7 и 2.4.
2. Я думаю, что ваша проблема где-то в другом месте, а не в показанном коде.
3. 2.7, не знал, что это проблема с именем int с именем round.
Ответ №1:
Где-то еще в вашем коде есть что-то, что выглядит так:
round = 42
Затем, когда вы напишете
round((a/b)*0.9*c)
это интерпретируется как означающий вызов функции для объекта , к которому привязан round
, который является int
. И это не удается.
Проблема в том, какой код привязывает an int
к имени round
. Найдите это и удалите.
Комментарии:
1. короче говоря, не называйте var и функцию равными.
2. Ах, старая
false = true
проблема. Этот тоже меня зацепил. питон-хитрая (и скользкая) хозяйка.
Ответ №2:
Я получил ту же ошибку (ошибка типа: объект ‘int’ не вызывается)
def xlim(i,k,s1,s2):
x=i/(2*k)
xl=x*(1-s2*x-s1*(1-x)) / (1-s2*x**2-2*s1*x(1-x))
return xl
... ... ... ...
>>> xlim(1,100,0,0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in xlim
TypeError: 'int' object is not callable
прочитав этот пост, я понял, что забыл знак умножения * так что
def xlim(i,k,s1,s2):
x=i/(2*k)
xl=x*(1-s2*x-s1*(1-x)) / (1-s2*x**2-2*s1*x * (1-x))
return xl
xlim(1.0,100.0,0.0,0.0)
0.005
танки
Комментарии:
1. На самом деле это была совсем другая проблема. Смотрите принятый ответ.
2. Я знаю, что это было давно, но этот ответ фактически решил мою проблему. Проголосуйте за меня
3. Для меня это должно было быть ответом. Это решило мою проблему.
Ответ №3:
Перестаньте топтаться round
где-то в другом месте, привязав int
к нему ан.
Ответ №4:
В моем случае я изменился:
return <variable>
с:
return str(<variable>)
попробуйте сделать следующее, и это должно сработать:
str(round((a/b)*0.9*c))
Ответ №5:
Я также сталкивался с этой проблемой, но в несколько ином сценарии.
Сценарий:
param = 1
def param():
.....
def func():
if param:
var = {passing a dict here}
param(var)
Здесь это выглядит простой и глупой ошибкой, но из-за нескольких строк кода в реальном коде мне потребовалось некоторое время, чтобы понять, что имя переменной, которое я использовал, совпадало с именем моей функции, из-за которого я получал эту ошибку.
Изменил имя функции на что-то другое, и это сработало.
Итак, в основном, согласно тому, что я понял, эта ошибка означает, что вы пытаетесь использовать целое число в качестве функции или, проще говоря, имя вызываемой функции также используется в качестве целого числа где-то в коде. Итак, просто попробуйте выяснить все вхождения имени вызываемой функции и посмотрите, используется ли оно где-нибудь в качестве целого числа.
Я изо всех сил пытался найти это, поэтому поделился этим здесь, чтобы кто-то другой мог сэкономить свое время, в случае, если они столкнутся с этой проблемой.
Ответ №6:
Иногда проблема заключалась бы в том, чтобы забыть оператора во время вычисления.
Пример:
print(n-(-1 (math.sqrt(1-4(2*(-n))))/2))
скорее
это должно быть
print(n-(-1 (math.sqrt(1-4*(2*(-n))))/2))
ХТХ
Ответ №7:
Как уже упоминалось, в вашем коде может быть переменная с именем round (типа int
), удаление которой должно устранить ошибку. Однако для записных книжек Jupyter простое удаление ячейки или ее удаление может не вывести переменную из области видимости. В таком случае вы можете перезапустить свой ноутбук, чтобы начать все заново после удаления переменной.
Ответ №8:
Существует две причины этой ошибки «Ошибка типа: объект ‘int’ не может быть вызван»
- Функция Имеет Целочисленное значение
Считать
a = [5, 10, 15, 20]
max = 0
max = max(a)
print(max)
Это приведет к ошибке типа: объект ‘int’ не может быть вызван.
Просто измените имя переменной «max» на var(скажем).
a = [5, 10, 15, 20]
var = 0
var = max(a)
print(var)
Приведенный выше код будет работать идеально без каких-либо ошибок!!
- Отсутствует математический оператор
Считать
a = 5
b = a(a 1)
print(b)
Это также приведет к ошибке типа: объект ‘int’ не может быть вызван.
Возможно, вы забыли поместить оператор между (в данном случае»*»)
Ответ №9:
Вы всегда можете использовать приведенный ниже метод для устранения неоднозначности функции.
__import__('__builtin__').round((a/b)*0.9*c)
__builtin__
это имя модуля для всех встроенных функций, таких как round, min, max и т.д. Используйте соответствующее имя модуля для функций из других модулей.