Неподдерживаемые типы операндов для -: 'Storage' и 'int' - PullRequest
0 голосов
/ 29 мая 2018

Я изучаю Python 2.7 и пытаюсь написать функцию в модуле с именем new5.py следующим образом:

def compare(a,b,c):
    if a - 3 == 8:
        return "I like a!"
    elif b == c:
        return "I like c!"
    else:
        return "I like b!"

Когда я пытаюсь вызвать функцию в имени с именем app02.py , который представлен с подробным кодом в конце списка, мне сказали так, как показано ниже на скриншоте:

TypeError description Screen Shot

Полагаю, проблема в a, но что мне делать, чтобы использовать функцию?Спасибо!

------ вот модуль app02.py рутирован из web.py 0.3 ------

import web
import new5

urls = (
    '/dyear', 'Index'
)

app = web.application(urls, globals())

render = web.template.render('/Users/Administrator/projects/gothonweb/templates/', base="layout01")


class Index(object):
    def GET(self):
        return render.hello_form01()

    def POST(self):
        form01 = web.input(a_year=1980)
        form02 = web.input(a_month=01)
        form03 = web.input(a_day=01)

        greeting = "Your result from app02 is %s" % (new5.compare(form01, form02, form03))
        return render.index(greeting = greeting)

if __name__ == "__main__":
    app.run()

1 Ответ

0 голосов
/ 30 мая 2018

Вместо того, чтобы передавать весь объект Storage для сравнения (), вы должны получить доступ к a_year в form01, a_month в form02 и a_day в form03 объектах, таких как form01.a_year, form2.a_month или form3.a_day Так что ваш вызов функции должен выглядетьчто-то вроде

greeting = "Your result from app02 is %s" % (new5.compare(form01.a_year, form02.a_month, form03.a_day))

Также обратите внимание на это из документов

Обратите внимание, что значения web.input () будут строками, даже если есть числапередается ему.

, поэтому вам нужно будет ввести ваш web.input из строки в требуемый тип (здесь int), например,

if int(a) - 3 == 8:
...