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  

最後に、ユーザーpriceが 0 から 100 の間で入力することを確認する必要があります。それだけです。

于 2013-01-01T17:15:13.513 に答える
2

try ステートメントは、コードがクラッシュする前にコードをキャッチする方法、またはキャッチされない例外が終了する方法です。一部の関数は、アプリケーションのクラッシュ/強制終了を引き起こす可能性のあるエラーをスローする場合があり、try ブロックはエラーになりそうなエラーを受け取り、それについて何かを行うことができます。

ie -> ログファイルを開こうとしているアプリですが、ファイルが見つかりません...

UnCaught: 強制終了、IOException。
Caught: ファイルを作成するコードの別のブロックを実行します。

あなたの例では、プロンプトから生データを取得し、整数値に割り当てます...ただしabc、整数に変換できないため、通常はクラッシュします... TRY ブロック内では、 -1、期待していた結果が得られなかったことを示します。

于 2013-01-01T17:15:37.943 に答える