[英]Running exceptions within a function - Python
我已經學習Python大約3周了,所以我正在從事的工作顯然非常簡單。 我已經編寫了一些程序,這些程序返回用於某些計算的值,並且我已經成功地在這些程序的函數中使用了異常。 我當前正在使用的程序僅是為了讓我有更多練習編寫函數,while循環和異常的目的。 到目前為止,這是我得到的:
def factorial(n):
while n > 0:
return n * factorial(n-1)
return 1
print factorial(n)
def user():
n = int(raw_input("What number would you like to use?"))
try:
factorial(int(n))
except ValueError:
print "You must choose a number. Please try again."
return user()
if __name__ == '__main__':
user()
我無法弄清楚為什么user()
函數中的異常似乎沒有在運行。 運行此代碼時得到的全部是raw_input "What number would you like to use?"
。 如果存在ValueError
, factorial()
函數不會運行,我設置的print
或return
語句也不會運行。 誰能幫我弄清楚為什么發生(或沒有發生)嗎?
有趣的是,所有代碼都在運行! 它只是不顯示任何內容,因為沒有調用print
語句! 讓我們分解用戶功能並查看其功能。
n = int(raw_input("What number would you like to use?"))
將用戶鍵入的字符串轉換為整數,並將其存儲到變量中(或者,如果您想用Python正確的話,將其存儲在名稱中 ) n
。
try:
factorial(int(n))
嘗試再次將n
轉換為整數並將該整數發送到factorial
函數。 注意,這里的n
已經是整數! 因此,這將永遠成功。 只需調用該函數,僅此而已。
except ValueError:
print "You must choose a number. Please try again."
return user()
如果引發ValueError
,則輸出錯誤消息,然后返回user
的值。
無論轉換成功與否,我們都不會打印任何內容。 我們只運行一個函數然后退出。 我們運行什么功能?
def factorial(n):
while n > 0:
return n * factorial(n-1)
return 1
print factorial(n)
請注意,在此函數中,代碼說要在返回值后打印一個值。 一旦函數返回,則在運行return語句之后什么也沒有。 print
語句將不會執行! 因此,此函數正確地(遞歸地)計算階乘並返回。 沒有其他的!
這就是為什么您的程序似乎什么也不做的原因。 調用,計算並返回答案的函數。 返回的答案將被忽略!
您的代碼中有三個關鍵行,它們定義了為什么要執行其操作。
n
ValueError
。 b
,然后按Enter鍵,將引發異常( ValueError
)。 n
轉換為整數並將其傳遞給factorial
。
try
塊中(應該如此),但是n
已經是整數。 這就是為什么您的異常代碼將永遠不會運行的原因。 factorial
函數內,在return語句之后。 它永遠不會被執行。 這就是為什么什么都不打印的原因。
factorial(n)
打印返回的結果會更好!) 我希望這有助於弄清代碼到底是怎么回事,並且希望我能夠回答您的問題! 編碼愉快! :d
這是我的評論擴展為答案。
首先,不要在factorial
函數內部打印。 打印從該函數返回的值:
def factorial(n):
while n > 0:
return n * factorial(n-1)
return 1
>>> factorial(4)
24
接下來,將您認為會導致異常的內容包裝在該塊的try
部分中。 在這種情況下,使用未知用戶輸入對int
的調用可能會導致異常。 把它包裹起來-再也沒有。 最后,請勿將遞歸用於用戶輸入。 請改用while循環:
def user():
n=None
while not n:
user_int=raw_input("What number would you like to use? ")
try:
n=int(user_int)
except ValueError:
print "You must choose a number. Please try again."
print factorial(n)
if __name__ == '__main__':
user()
首先,您必須print
factorial(int(n))
才能看到輸出,並刪除輸入的int
轉換,
這是我修改的代碼:
def factorial(n):
2 while n > 0:
3 return n *factorial(n-1)
4 return 1
5 print factorial(n)
6
7
8
9
10 def user():
11 n = raw_input("What number would you like to use?")
12
13 try:
14
15 print factorial(int(n))
16 except ValueError:
17 print "You must choose a number. Please try again."
18 return user()
19
20 if __name__ == '__main__':
21 user()
希望這可以幫助,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.