Python 3.2官方文檔翻譯:異常處理

來源:互聯網
上載者:User

8.3 異常處理

編寫可以處理可選擇的異常是可能的。 看看下面的例子,要求使用者輸入一個合法的整數類型,但是允許使用者打斷程式()用control-c或者其他動作系統支援的語言;注意一個使用者產生的終端會引發一個keyboardInterrupt 異常。

>>> while True:

... try:

... x = int(input("Please enter a number: "))

... break

... except ValueError:

... print("Oops! That was no valid number. Try again...")

...

Try語句如下工作:

l 首先,執行try句子裡面內容。(在try和except關鍵字之間的語句)

l 如果沒有異常發生,except語句就會跳過,try語句執行就結束。

l 如果在執行try語句過程中異常發生,剩下的語句就會跳過。 如果發生的 異常名稱和except關鍵字之後的異常相同, except語句就會執行,它時在try語句之後執行的。

l 如果發生沒有與except語句異常名稱相匹配的異常,它就傳遞給try語句外部。如果發現沒有處理的異常,就會拋出沒有處理的異常並且列印出如上面的異常資訊。

l

為了具體處理不同的異常,Try語句可以包含許多except語句。在但最多隻有一個異常處理。 處理器只能處理髮生髮生在相應的try語句中的異常。而不是相同的try中發生的其他異常。

一個execpt可能作為一個括弧括起來的元組裡,命名多個異常,例如:

... except (RuntimeError, TypeError, NameError):

... Pass

返回欄目頁:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/

最後一個except子句可以省略異常名稱,以作為萬用字元使用。你需要謹慎使用這個。因為用這種方式很容易隱藏一個實際的程式錯誤。可以使用這種方法列印一條錯誤資訊,然後重新拋出異常。(允許調用這處理這個異常)

import sys

try:

f = open(’myfile.txt’)

s = f.readline()

i = int(s.strip())

except IOError as err:

print("I/O error: {0}".format(err))

except ValueError:

print("Could not convert data to an integer.")

except:

print("Unexpected error:", sys.exc_info()[0])

Raise

在try ... Except語句中也可以選擇添加else語句,如果它存在,必須跟在所有except語句的後面,如果try語句不不想上拋一個異常但但又讓接後的代碼執行,那麼這個語句就非常有用。例如:

for arg in sys.argv[1:]:

try:

f = open(arg, ’r’)

except IOError:

print(’cannot open’, arg)

else:

print(arg, ’has’, len(f.readlines()), ’lines’)

f.close()

 

使用else子句要比在try後面添加代碼要好,因為它可以避免額外的捕捉異常。它們並不是由try... :keyword:except語句保護的代碼所拋出。

當一個異常發生時,它可能有相關聯的值,也可以成為異常的參數。參數的存在與類型依賴於異常的類型。

Except語句可以在異常名稱後描述一個變數。這個變數與包含參數的異常執行個體相互綁定。為了方便起見,異常執行個體定義了_str_()方法以至於不需要調用參數.args可以直接列印參數。你也可以拋出異常前先執行個體化它,然後給它添加任何想要的屬性。

>>> try:

... raise Exception(’spam’, ’eggs’)

... except Exception as inst:

... print(type(inst)) # the exception instance

... print(inst.args) # arguments stored in .args

... print(inst) # __str__ allows args to be printed directly,

... # but may be overridden in exception subclasses

... x, y = inst.args # unpack args

... print(’x =’, x)

... print(’y =’, y)

...

<class ’Exception’>

(’spam’, ’eggs’)

(’spam’, ’eggs’)

x = spam

y = eggs

 

如果異常還有參數,對於沒處理的異常將會列印在異常資訊中的最後一部分中。

異常處理器不僅僅處理那些try子句中立刻發生的異常,也會處理那些try子句中調用的函數內部發生的異常:例如::

>>> def this_fails():

... x = 1/0

...

>>> try:

... this_fails()

... except ZeroDivisionError as err:

... print(’Handling run-time error:’, err)

...

處理運行時的錯誤: int division or modulo by zero

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.