[英]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
塊中的代碼實際上沒有發生,因此num
或num_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.