try:语句失败

时间:2011-02-12 01:55:20

标签: python

我有一些失败的python代码:

import sys
print ("MathCheats Times-Ed by jtl999")
numbermodechoice = raw_input ("Are you using a number with a decimal? yes/no ")
if numbermodechoice == "yes":
    try:
    numberx1 = float(raw_input('Enter first number: '))
except ValueError:
    print ("Oops you typed it wrong")
try:
    numberx1 = float(raw_input('Enter first number: '))
except ValueError:
    print ("Oops you typed it wrong")
    numberx2 = (float)(raw_input('Enter second number: '))
elif numbermodechoice == "no":
    print ("Rember only numbers are allowed")  
    numberx1 = (int)(raw_input('Enter first number: '))
    numberx2 = (int)(raw_input('Enter second number: '))
else:
    print ("Oops you typed it wrong")
    exit()
print ("The answer was")
print numberx1*numberx2
ostype = sys.platform
if ostype == 'win32':
    raw_input ("Press enter to exit")
elif ostype == 'win64':
    raw_input ("Press enter to exit")

(完整代码here

我想用try语句包装float操作,所以如果ValueError发生,它就会被捕获。这是输出:

 File "./Timesed.py", line 23
    try:
      ^
IndentationError: expected an indented block

它有什么问题,如何解决这个问题?

6 个答案:

答案 0 :(得分:2)

对于前导空格,Python是空白敏感的。

您的代码可能应该缩进

import sys
from sys import exit
print ("MathCheats Times-Ed by jtl999")
numbermodechoice = raw_input ("Are you using a number with a decimal? yes/no ")
if numbermodechoice == "yes":
    try:
        numberx1 = float(raw_input('Enter first number: '))
        numberx2 = float(raw_input('Enter second number: '))
    except ValueError:
        print ("Oops you typed it wrong")
        exit()
elif numbermodechoice == "no":
    print ("Remember only numbers are allowed")  
    try:
        numberx1 = (int)(raw_input('Enter first number: '))
        numberx2 = (int)(raw_input('Enter second number: '))
    except ValueError:
        print ("Oops you typed it wrong")        
        exit()
else:
    print ("Oops you typed it wrong")
    exit()
print ("The answer was") 
print numberx1*numberx2
ostype = sys.platform
if ostype == 'win32':
    raw_input ("Press enter to exit")
elif ostype == 'win64':
    raw_input ("Press enter to exit")

答案 1 :(得分:1)

在python中,代码的缩进非常重要。您向我们展示的错误指出:

if numbermodechoice == "yes":
    try:
    numberx1 = float(raw_input('Enter first number: '))
except ValueError:
    print ("Oops you typed it wrong")

作为块一部分的所有代码必须缩进。通过启动try块,以下行是该块的一部分,必须缩进。要解决它,缩进它!

if numbermodechoice == "yes":
    try:
        numberx1 = float(raw_input('Enter first number: '))
    except ValueError:
        print ("Oops you typed it wrong")

答案 2 :(得分:0)

你的语法错误。它应该是except ValueError:而不是except: ValueError。在问题中也为你纠正。

答案 3 :(得分:0)

您需要缩进第二个print语句。

缩进在Python中很重要。这是你用这种语言划分块的方式。

答案 4 :(得分:0)

转换为float使用的语法不正确。该语法对C / C ++ / Java有效,但在Python中无效。它应该是:

numberx1 = float(raw_input('Enter first number: '))

这将被解释为float("2.3"),它是使用字符串参数调用的float类型的构造函数。并且,是的,函数调用的语法完全相同,所以您甚至可能认为构造函数是一个返回对象的函数。

答案 5 :(得分:0)

import sys

class YesOrNo(object):
    NO_VALUES  = set(['n', 'no', 'f', 'fa', 'fal', 'fals', 'false', '0'])
    YES_VALUES = set(['y', 'ye', 'yes', 't', 'tr', 'tru', 'true', '1'])

    def __init__(self, val):
        super(YesOrNo,self).__init__()
        self.val = str(val).strip().lower()

        if self.val in self.__class__.YES_VALUES:
            self.val = True
        elif val in self.__class__.NO_VALUES:
            self.val = False
        else:
            raise ValueError('unrecognized YesOrNo value "{0}"'.format(self.val))

    def __int__(self):
        return int(self.val)

def typeGetter(dataType):
    try:
        inp = raw_input
    except NameError:
        inp = input

    def getType(msg):
        while True:
            try:
                return dataType(inp(msg))
            except ValueError:
                pass
    return getType

getStr     = typeGetter(str)
getInt     = typeGetter(int)
getFloat   = typeGetter(float)
getYesOrNo = typeGetter(YesOrNo)

def main():
    print("MathCheats Times-Ed by jtl999")

    isFloat = getYesOrNo("Are you using a number with a decimal? (yes/no) ")
    get = (getInt, getFloat)[int(isFloat)]

    firstNum = get('Enter first number: ')
    secondNum = get('Enter second number: ')

    print("The answer is {0}".format(firstNum*secondNum))

if __name__=="__main__":
    main()
    if sys.platform in ('win32','win64'):
        getStr('Press enter to exit')