Ошибка типа ошибки Python - PullRequest
       12

Ошибка типа ошибки Python

2 голосов
/ 26 ноября 2008

Я пишу простую программу, которая поможет генерировать заказы на игру, членом которой я являюсь. Это относится к категории программ, которые мне на самом деле не нужны. Но теперь я начал, я хочу, чтобы это работало. Все это в значительной степени проходит гладко, но я не могу понять, как остановить ошибку типа, возникающую примерно на полпути. Вот код:

status = 1

print "[b][u]magic[/u][/b]"

while status == 1:
    print " "
    print "would you like to:"
    print " "
    print "1) add another spell"
    print "2) end"
    print " "
    choice = input("Choose your option: ")
    print " "
    if choice == 1:
        name = raw_input("What is the spell called?")
        level = raw_input("What level of the spell are you trying to research?")
        print "What tier is the spell: "
        print " "
        print "1) low"
        print "2) mid"
        print "3) high"
        print " "
        tier = input("Choose your option: ")
        if tier == 1:
            materials = 1 + (level * 1)
            rp = 10 + (level * 5)
        elif tier == 2:
            materials = 2 + (level * 1.5)
            rp = 10 + (level * 15)
        elif tier == 3:
            materials = 5 + (level * 2)
            rp = 60 + (level * 40)
        print "research ", name, "to level ", level, "--- material cost = ",
                materials, "and research point cost =", rp
    elif choice == 2:
        status = 0

Может кто-нибудь помочь?

редактировать

Я получаю ошибку:

Traceback (most recent call last):
  File "C:\Users\Mike\Documents\python\magic orders", line 27, in <module>
    materials = 1 + (level * 1)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

1 Ответ

13 голосов
/ 26 ноября 2008

Трассировка стека помогла бы, но, вероятно, ошибка:

materials = 1 + (level * 1)

‘level’ - это строка, и вы не можете выполнять арифметику со строками. Python - это динамически типизированный язык, но не слабо типизированный.

level= raw_input('blah')
try:
    level= int(level)
except ValueError:
    # user put something non-numeric in, tell them off

В других частях программы вы используете input (), который будет оценивать введенную строку как Python, поэтому для «1» вы получите число 1.

Но! Это очень опасно - представьте, что произойдет, если пользователь введет «os.remove (имя файла)» вместо числа. Если пользователь не только вы, и вам все равно, никогда не используйте input (). Это исчезнет в Python 3.0 (поведение raw_input будет переименовано в input).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...