Ошибка TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

MrGeo

Новичок
Пользователь
Апр 19, 2020
22
3
3
Есть вот такой отрезок кода
Python:
def frange(start, end, step):
    t = start
    while t < end:
        yield t
        t += step


def f(x, v):
    if v == 'log(x+4)+x^4':
        return log(x + 4) + x ** 4
    elif v == '(e^(-x)*sin(x))/x':
        return (e ** (-x) * sin(x)) / x


def integ(a, b, n, v):
    h = float((b - a)) / n
    s = 0
    s = (((f(a, v) + f(b, v)) / 2) + s)
    for x in frange(a + h, b, h):
        s = f(x, v) + s
    s = s * h
    return s


def calc_integ():
    a = int(a_num.get())
    b = int(b_num.get())
    n = int(n_num.get())
    v = (variable.get())
    res = integ(a, b, n, v)
При выполнении программы, вылезает ошибка :
Traceback (most recent call last):
File "C:\[Software]\Python 3.8.2(64-bit)\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "C:/Users/Виктя/Desktop/Попытка курсача/prog1.py", line 40, in calc_integ
res = integ(a, b, n, v)
File "C:/Users/Виктя/Desktop/Попытка курсача/prog1.py", line 28, in integ
s = (((f(a, v) + f(b, v)) / 2) + s)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

Process finished with exit code 0

Просиходит такое, если работать с уравнением '(e^(-x)*sin(x))/x, если же работать с другим, ошибки нет и все считает правильно.

Так же у меня в этой же программе есть дифференцирование
Python:
def diff1(x0, v, dx):
    ra = (((f(x0, v)*(x0+dx)) - (f(x0, v) * x0)) / dx)
    return ra


def diff2(x0, v, dx):
    ra = (((f(x0, v) * (x0 + dx)) - (f(x0, v) * (x0 - dx))) / (2 * dx))
    return ra


def diff3(x0, v, dx):
    ra = (((f(x0, v)*(x0)) - (f(x0, v) * (x0 - dx))) / dx)
    return ra


def calc_diff():
    v = (variable.get())
    x0 = float(x_num.get())
    dx = float(dx_num.get())
    ff = (e ** -(x0) * sin(x0)) / x0
    if v == 'log(x+4)+x^4':
        res2 = diff1(x0, v, dx)
        res3 = diff2(x0, v, dx)
        res4 = diff3(x0, v, dx)
    else:
        res2 = (((ff*(x0+dx)) - (ff * x0)) / dx)
        res3 = (((ff * (x0 + dx)) - (ff * (x0 - dx))) / (2 * dx))
        res4 = (((ff*(x0)) - (ff * (x0 - dx))) / dx)
    result2.configure(text=res2)
    result3.configure(text=res3)
    result4.configure(text=res4)

Тут вылезала такая же ошибка при втором уравнении, зато есть прогонять не через функции diff, а на прямую, как в calc_diff то все работает. Почему? И как можно исправить эту ошибку?
 

MrGeo

Новичок
Пользователь
Апр 19, 2020
22
3
3
Решил проблему. Ошибка было изза моей невнимательности. Среди этих отрезков кода нет ответа на эту проблему.
 
  • Мне нравится
Реакции: Student

Форум IT Специалистов