簡體   English   中英

處理異常后繼續在 for 循環中進行下一次迭代

[英]Continue to next iteration in a for loop after handling an exception

num_list = [195,265,2.7,750]

一旦達到 2.7,它就會一遍又一遍地打印“錯誤”。 處理完這個異常后,有沒有辦法繼續下一次迭代?

def palindrome(num_list):
    for num in num_list:
        num_reverse = num[::-1]
        count = 0
        while num != num_reverse:
            try:
                num = int(num)
                num_reverse = int(num_reverse)

                num += num_reverse
                count += 1

                num = str(num)
                num_reverse = num[::-1]
                print(count, num)
            except ValueError:
                print('Error')
            continue

確實會繼續下一次迭代(甚至不需要continue語句來實現這一點)。

問題是在下一次迭代中,同樣的事情發生了——因為num = int(num)失敗, try塊中的代碼實際上沒有發生,因此numnum_reverse的值沒有變化。

很明顯,您的num_list實際上包含字符串 - 盡管有您的描述 - 因為否則num_reverse = num[::-1]會失敗。 當輸入字符串不能被解釋為整數時,您似乎想要做的是移動到for循環的下一次迭代(如果第一次可以,那么它應該繼續進行所有的 while 循環迭代)。

編寫易於理解的正確代碼的最簡單方法是在此循環內使值始終為整數。 確保從整數開始,然后創建一個單獨的函數來反轉值並返回一個整數

def with_reversed_digits(an_integer):
    digits = str(an_integer)
    return int(digits[::-1])

(請注意,只要an_integer實際上是int ,這應該始終有效,因為在被轉換的字符串中允許前導零。)

現在您可以適當地編寫邏輯:

for num in num_list:
    # If any of these values isn't an integer, that should be treated
    # as a programming error *elsewhere*, i.e. in the calling code.
    num_reverse = with_reversed_digits(num)
    count = 0
    while num != num_reverse:
        # We have no try/except or int/str conversions here,
        # because we always just have integers.
        num += num_reverse
        count += 1
        num_reverse = with_reversed_digits(num)
        print(count, num)

一個簡單的解決方案是用break替換您的 continue 另外我認為您打算將您的num變量轉換為 str

def palindrome(num_list):
    for num in num_list:
        num = str(num)
        num_reverse = num[::-1]
        count = 0
        while num != num_reverse:
            try:
                num = int(num)
                num_reverse = int(num_reverse)

                num += num_reverse
                count += 1

                num = str(num)
                num_reverse = num[::-1]
                print(count, num)
            except ValueError:
                print('Error')
            break

輸出

1 786
1 827
Error
1 807

暫無
暫無

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

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