在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 錯誤和異常 (3)
標準庫 (4)
如何成為 Python 高手
標準庫 (6)
標準庫 (3)
類(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習
列表(3)
從小工到專家
除法
錯誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準備
函數(shù)練習
標準庫 (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫一個簡單的程序
將數(shù)據(jù)存入文件
語句(5)
SQLite 數(shù)據(jù)庫
集成開發(fā)環(huán)境(IDE)
集合(1)
類(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語句(4)
錯誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標準庫 (1)
生成器
mysql 數(shù)據(jù)庫 (1)
第三方庫
實戰(zhàn)
運算符
類(3)
字典(2)
語句(1)
數(shù)和四則運算
語句(2)
文件(2)
MySQL 數(shù)據(jù)庫 (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫 (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫模塊
用 tornado 做網(wǎng)站 (1)
標準庫 (5)
函數(shù)(4)
類(5)
字符串(2)
關于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學函數(shù)和運算優(yōu)先級
字符串(3)
為計算做準備
多態(tài)和封裝
類(4)
迭代
語句(3)
錯誤和異常 (3)
分析 Hello
Python 安裝
標準庫 (2)
列表(2)
元組

錯誤和異常 (3)

按照一般的學習思路,掌握了前兩節(jié)內容,已經(jīng)足夠編程所需了。但是,我還想再多一步,還是因為本教程的讀者是要 from beginner to master。

assert

>>> assert 1==1
>>> assert 1==0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

從上面的舉例中可以基本了解了 assert 的特點。

assert,翻譯過來是“斷言”之意。assert 是一句等價于布爾真的判定,發(fā)生異常就意味著表達式為假。

assert 的應用情景就有點像漢語的意思一樣,當程序運行到某個節(jié)點的時候,就斷定某個變量的值必然是什么,或者對象必然擁有某個屬性等,簡單說就是斷定什么東西必然是什么,如果不是,就拋出錯誤。

#!/usr/bin/env Python
# coding=utf-8

class Account(object):
    def __init__(self, number):
        self.number = number
        self.balance = 0

    def deposit(self, amount):
        assert amount > 0
        self.balance += balance

    def withdraw(self, amount):
        assert amount > 0
        if amount <= self.balance:
            self.balance -= amount
        else:
            print "balance is not enough."

上面的程序中,deposit() 和 withdraw() 方法的參數(shù) amount 值必須是大于零的,這里就用斷言,如果不滿足條件就會報錯。比如這樣來運行:

if __name__ == "__main__":
    a = Account(1000)
    a.deposit(-10)

出現(xiàn)的結果是:

$ python 21801.py
Traceback (most recent call last):
  File "21801.py", line 22, in <module>
    a.deposit(-10)
  File "21801.py", line 10, in deposit
    assert amount > 0
AssertionError

這就是斷言 assert 的引用。什么是使用斷言的最佳時機?有文章做了總結:

如果沒有特別的目的,斷言應該用于如下情況:

  • 防御性的編程
  • 運行時對程序邏輯的檢測
  • 合約性檢查(比如前置條件,后置條件)
  • 程序中的常量
  • 檢查文檔

(上述要點來自:Python 使用斷言的最佳時機 )

不論是否理解,可以先看看,請牢記,在具體開發(fā)過程中,有時間就回來看看本教程,不斷加深對這些概念的理解,這也是 master 的成就之法。

最后,引用危機百科中對“異常處理”詞條的說明,作為對“錯誤和異?!辈糠值目偨Y(有所刪改):

異常處理,是編程語言或計算機硬件里的一種機制,用于處理軟件或信息系統(tǒng)中出現(xiàn)的異常狀況(即超出程序正常執(zhí)行流程的某些特殊條件)。

各種編程語言在處理異常方面具有非常顯著的不同點(錯誤檢測與異常處理區(qū)別在于:錯誤檢測是在正常的程序流中,處理不可預見問題的代碼,例如一個調用操作未能成功結束)。某些編程語言有這樣的函數(shù):當輸入存在非法數(shù)據(jù)時不能被安全地調用,或者返回值不能與異常進行有效的區(qū)別。例如,C 語言中的 atoi 函數(shù)(ASCII 串到整數(shù)的轉換)在輸入非法時可以返回 0。在這種情況下編程者需要另外進行錯誤檢測(可能通過某些輔助全局變量如 C 的 errno),或進行輸入檢驗(如通過正則表達式),或者共同使用這兩種方法。

通過異常處理,我們可以對用戶在程序中的非法輸入進行控制和提示,以防程序崩潰。

從進程的視角,硬件中斷相當于可恢復異常,雖然中斷一般與程序流本身無關。

從子程序編程者的視角,異常是很有用的一種機制,用于通知外界該子程序不能正常執(zhí)行。如輸入的數(shù)據(jù)無效(例如除數(shù)是 0),或所需資源不可用(例如文件丟失)。如果系統(tǒng)沒有異常機制,則編程者需要用返回值來標示發(fā)生了哪些錯誤。

一段代碼是異常安全的,如果這段代碼運行時的失敗不會產生有害后果,如內存泄露、存儲數(shù)據(jù)混淆、或無效的輸出。

Python 語言對異常處理機制是非常普遍深入的,所以想寫出不含 try, except 的程序非常困難。


總目錄   |   上節(jié):錯誤和異常(2)   |   下節(jié):編寫模塊

如果你認為有必要打賞我,請通過支付寶:qiwsir@126.com,不勝感激。

上一篇:編寫模塊下一篇:特殊方法 (1)