1. 程式人生 > >python程式設計(5):錯誤與異常

python程式設計(5):錯誤與異常

1 異常處理

import sys
try:
    f = open("myfile.txt")
    s = f.readline()
    i = int(s.strip())
# except OSError as err:
#     print("OS error: {0}".format(err))
# except ValueError:
#     print("could not convert data to an integer")
except (OSError,ValueError): #(error1,error2),異常元組
    print("an error occurred")
except:#通配異常
    print("unexpected error:",sys.exc_info()[0]) #print prompt message
    raise    #將異常繼續丟擲,給上層處理
else:#沒有發生異常
    print("there is no error or execpetion in the programming code")

2 丟擲異常
#python使用raise語句丟擲一個指定的異常
try:
    raise ValueError("HiThere")
except ValueError:
    print("an exception flew by")
    raise #如果你只想知道這是否丟擲了一個異常,
          # 並不想去處理它,那麼一個簡單的 raise 語句就可以再次把它丟擲

3 使用者自定義異常
#使用者自定義異常
#你可以通過建立一個新的exception類來擁有自己的異常。
# 異常應該繼承自 Exception 類,或者直接繼承,或者間接繼承,
class MyError(Exception):
    def __init__(self,value):#類 Exception 預設的 __init__() 被覆蓋。
        self.value = value
    def __str__(self):
        return repr(self.value)


try:
    raise MyError(2*2)
except MyError as e:
    print("My Exception occurred,value:",e.value)
#當建立一個模組有可能丟擲多種不同的異常時,
# 一種通常的做法是為這個包建立一個基礎異常類,然後基於這個基礎類為不同的錯誤情況建立不同的子類:
class Error(Exception):
    """Base class for exceptions in this module."""
    pass

class InputError(Error):
    """ Exception raised for errors in the input
        Attributes:
            expression--input expression in which the error occurred
            message   --explanation of the error
    """
    def __init__(self,expression,message):
        self.expression = expression
        self.message = message

class TransitionError(Error):
    """Raised when an operation attempts a state transition  that's not allowed
       Attributes:
           previous -- state at beginning of transition
           next     -- attempted new state
           message  -- explanation of why the specific transition is not allowed
    """
    def __init__(self,previous,next,message):
        self.previoud = previous
        self.next = next
        self.message = message

4 定義清理行為
>>> def divide(x, y):
        try:
            result = x / y
        except ZeroDivisionError:
            print("division by zero!")
        else:
            print("result is", result)
        finally:
            print("executing finally clause")
   
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'

5 預定義的清理行為
#一些物件定義了標準的清理行為,無論系統是否成功的使用了它,一旦不需要它了,那麼這個標準的清理行為就會執行
for line in open("myfile.txt"):
    print(line,end="")  #這段程式碼的問題是,當執行完畢後,檔案保持開啟的轉態,並沒有關閉

with open("myfile.txt") as f:
    for line in f:
        print(line,end="") #關鍵詞 with 語句就可以保證諸如檔案之類的物件在使用完之後一定會正確的執行他的清理方法



相關推薦

python程式設計(5):錯誤異常

1 異常處理 import sys try: f = open("myfile.txt") s = f.readline() i = int(s.strip()) # exce

Python 2.7 錯誤異常

1 語法錯誤 產生語法錯誤時,解析器會重複錯誤的行,並且使用一個箭頭指向錯誤行中最早發現錯誤的位置。錯誤便是由箭頭之前的符號引發的(至少是在此處檢測到的)。檔名與行數將會被打印出來,當輸入來自指令碼時用以得知在哪裡找尋錯誤。 2 異常 在執行期間檢測到的錯誤稱之

python 語法錯誤異常

問題 ber 信息 nbsp 解釋 num 了解 判斷 god 語法錯誤與異常 語法錯誤,例如: while True print(”my god“) 這面這裏錯的地方在於沒有加:冒號以及打印要換到第二行 異常,例如: num = 9 print("nummber

Python基礎入門(錯誤異常

#錯誤與異常 ​ #錯誤主要是語法上的錯誤 # prinnt("no") #拼寫錯誤 NameError: name 'prinnt' is not defined print("yes"); # 多加了分號然而並沒有錯 # print("no")#中文輸入法 IndentationError: u

PHP之 錯誤 異常處理

函數 用戶 exceptio 產生 存放位置 如果 date error_log reporting PHP的錯誤報告有三種: 1.錯誤,語法解析錯誤,致命錯誤2.警告3.註意 錯誤 -> 致命錯誤,會終止已下程序的執行,語法錯誤的話,PHP壓根就沒執行警告 ->

python學習5-集合集合操作

必須 成員 car ror 索引 叠代 err amp pop 數學意義上的集合,沒有重復元素,元素必須可hash1、定義s = set()s = {1,2,3}s = set(可叠代對象)2、加s.add(元素) #增加1個元素,類似列表的appends.update(可

【軟件構造】第七章第二節 錯誤異常處理

throw 之間 IE 程序猿 數組越界 它的 extends 希望 nds 第七章第二節 錯誤與異常處理 本節關註:Java中錯誤和異常處理的典 型技術——把原理落實到代碼上! Outline: Java中的錯誤和異常(java.lang.throwable) 異常

《快學 Go 語言》第 10 課 —— 錯誤異常

Go 語言的異常處理語法絕對是獨樹一幟,在我見過的諸多高階語言中,Go 語言的錯誤處理形式就是一朵奇葩。一方面它鼓勵你使用 C 語言的形式將錯誤通過返回值來進行傳遞,另一方面它還提供了高階語言一般都有的異常丟擲和捕獲的形式,但是又不鼓勵你使用這個形式。後面我們統一將返回值形式的稱為「錯誤」,將丟擲捕獲形式的稱

PHP 錯誤異常處理(一)

PHP 錯誤與異常處理(一) 異常與錯誤 PHP中的錯誤: php中大部分情況是由錯誤的語法,伺服器環境導致,使得編譯器無法通過檢查,甚至無法執行的情況。warning、notice都是錯誤,只是他們的級別不同而已,並且錯誤是不能被try-catch捕獲的。 PHP中的異常: 程式

python3 面向物件程式設計錯誤以及異常處理

類與例項 類是抽象的模板,例項是根據類創建出來的一個個具體的“物件”; 術語解釋 類(Class): 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。 方法:類中定義的函式。 類變數:類變數在整個例項化的物

python-檔案I/O異常處理

open函式 Python內建的open()函式開啟一個檔案,建立一個file物件,相關的輔助方法才可以呼叫它進行讀寫。語法為: file object = open(file_name [, access_mode][, buffering]) 各個引數的細節如下: 1、file_name

PHP錯誤異常處理(一)

語法 數據 war 錯誤處理 級別 過程 應該 要求 文件 在項目開發過程中,無論你多麽仔細,都會遇到這樣或那樣的報錯,這就要求我們有個很好的處理。錯誤處理的目標:1、提升用戶體驗。2、防止數據的丟失或者程序崩潰。 php錯誤分為以下幾類1、錯誤(語法錯誤,程序直接不執行;

COM元件設計應用(十二)——錯誤異常處理

一、前言   程式設計中,錯誤處理必不可少,而且通常要佔用很大的篇幅。本回書著落在 COM 中的錯誤(異常)的處理方法。   在元件程式中,如果遇到錯誤,一般有兩個方式進行處理。   二、簡單返回   對於比較簡單的錯誤,直接返回表示錯誤原因的 HRESULT。比如下面幾個

再談PHP錯誤異常處理

  部落格好久沒有更新了,實在慚愧,最近在忙人生大事,哈哈!這段時間沒有看什麼新的東西,結合專案中遇到的PHP異常處理問題,我又重新梳理了之前模糊的概念,希望對大家理解PHP異常處理有所幫助。   請一定要注意,沒有特殊說明:本例 PHP Version < 7  說起PHP異常處理,大家首先會想到tr

python中的錯誤異常處理

使用try except處理異常 try: print 10 / 0 except ZeroDivisionError, e: print "catched a ValueError:",e 上面的程式碼中,被除數是0,會引發ZeroDivi

【00】面向ArcGIS的Python程式設計——常見錯誤大全(後續更新中......)

1、縮排錯誤,導致Parsing error IndentationError: unexpected indent (line 3)錯誤。 2、注意>>>和...的區別 3、在使用指令碼執行地理處理工具,例如裁剪(clip)工具時,如果輸入

requests庫入門10-超時,錯誤異常

在實際釋出到生產上的介面測試程式碼,都會加上超時的設定,當伺服器超過一定時間沒有響應,會報出超時異常。因為requests會自動等待響應。如果不加上超時的設定,可能指令碼會一直卡在那裡。。 超時設定在請求中使用timeout引數 requests.get('http:gi

Go 初體驗 - 錯誤異常處理 - recover和panic

當前 都是 inf defer bubuko bsp 分享 def catch 先看代碼: 輸出: 內建函數panic可以讓我們人為地產生一個運行時恐慌。不過,這種致命錯誤是可以被恢復的。在Go語言中,內建函數recover就可以做到這一點。 實際上,內建函數panic

Python3.2 官方文檔翻譯--錯誤異常

content 實用 就會 同方 exce 語法錯誤 art err new 第六章?錯誤和異常 直到如今錯誤信息還沒有被涉及到。但你假設已經嘗試了

Python程式設計基礎之九錯誤異常

一、簡介   Python最強大的結構之一就是它的異常處理能力,所有的標準異常都使用類來實現,都是基類Exception的成員,都從基類Exception繼承,而且都在exceptions模組中定義。Python自動將所有異常名稱放在內建名稱空間中,所以程式不必匯入exc