簡體   English   中英

python中的Try-Except塊

[英]Try-Except block in python

這是我正在運行的代碼,基本上它只是要求用戶輸入數字,然后輸入“done”后,計算它們的平均值:

average = 0
total = 0.0
count = 0

while True:
    num = raw_input()
    if num == "done":
    break
    try:
        int(num)
        total = total + num
        count = count + 1
    except:
        print "bad data"
average = total / count
print total, count, average

我的問題是,即使我輸入一個整數,仍然執行除了塊(即我得到“壞數據”作為輸出),你能告訴我為什么會這樣嗎?

int(num)

這將返回一個整數,但您不會將num重新分配給此整數。 你需要這樣做

num = int(num)

該行有效。

另請注意,您應該只打印異常,以獲取更多信息:

try:
    num_int = int(num)
    total = total + num_int
    count = count + 1
except ValueError as e:
    print e

我們專門捕獲ValueError的原因是因為捕獲您期望的異常(並處理特定異常的情況)是非常好的做法,而不是盲目地捕獲所有內容。

int(num)不會在適當的位置轉換num ,您必須分配結果。 將行更改為:

num = int(num)

而你應該是金色的。

int(num)不會改變num ; 它返回一個新值。 如果要更改它,可以將該新值重新分配給num

num = int(num)

捕獲特定錯誤並盡可能多地移出try塊以避免隱藏有用的異常信息也是一個好主意。

average = 0
total = 0.0
count = 0

while True:
    num = raw_input()
    if num == "done":
        break
    try:
        num = int(num)
    except ValueError:
        print "bad data"
        continue

    total += num
    count += 1

average = total / count
print total, count, average

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM