0

有人可以解释一下这段代码是如何为我工作的吗?从try命令下来我不明白。这个while循环对我有用。但是我不明白它是如何工作的。

price = 110 #this i get
ttt = 1 #this i get

while price< 0 or price> 100: #this i get
    if ttt >=2: #this i get
        print "This is an invalid entry" #this i get
        print "Please enter a number between 0 and 100" #this i get
    try: #From here i do not understand , but without it, it does not work
          price= int(raw_input("Please enter the price : "))
    except ValueError:
      price = -1   
    ttt +=1

由于我是一名学习者,我真的不想要更复杂的方法来做到这一点。我只想完全了解循环中发生的事情。

4

3 回答 3

2

try:启动一个可以处理异常的代码块。该except ValueError子句的意思是,如果有任何东西在块中抛出ValueError异常,那么该异常将被except.

在这种情况下,这意味着如果有人输入一个不是有效整数的值,price将被设置为-1.

因为price现在设置为-1,所以 while 循环再次询问价格(-1 < 0is True):

while price< 0 or price> 100:  # price was set to -1, so the while loop condition is True.

以下是异常如何中断程序的简短演示:

>>> int('not an integer')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'not an integer'
>>> try:
...     int('not an integer')
... except ValueError:
...     print 'Caught the exception, no problemo!'
... 
Caught the exception, no problemo!
>>> try:
...     price = int('not an integer')
... except ValueError:
...     price = -1
... 
>>> price
-1

有关其工作原理的更多信息,请参阅有关异常处理的 Python 教程。

于 2013-01-01T17:15:02.853 回答
2

try ... except处理异常。异常处理是一个广泛的主题,对于 python,您可以在此处阅读更多信息:http: //docs.python.org/2/tutorial/errors.html#handling-exceptions

在您的情况下,输入来自用户:

raw_input("Please enter the price : ")

并将其转换为整数:

int(...)

现在,当用户输入“Happy New Year”时会发生什么?这不是一个数字,它是一个错误的值,它是一个ValueError. 当函数无法产生结果时,它会引发int ValueError

如果不处理该条件,程序将停在那里。您可以将关键部分包装到一个try语句中,并指定如果发生异常,您希望发生什么,而不是仅仅退出。在您的情况下,价格仅设置为-1:

price = -1  

最后,应该确保用户输入的 aprice介于 0 和 100 之间,仅此而已。

于 2013-01-01T17:15:13.513 回答
2

try 语句是一种在代码崩溃之前捕获代码的方法,或者退出 do 到未捕获的异常。某些函数可能会抛出可能导致应用程序崩溃/强制退出的错误,而 try 块会处理那些可能出现的错误,并让您对其进行处理。

ie -> 一个试图打开日志文件的应用程序,但没有找到文件...

未捕获:强制,IOException。
捕获:执行另一个创建文件的代码块。

在您的示例中,它将从提示中获取原始数据,并将其分配给整数值...但是abc不能转换为整数,因此它通常会崩溃...在 TRY 块内,它将返回一个-1,表示它没有收到预期的结果。

于 2013-01-01T17:15:37.943 回答