Python assert 的使用方法
assert巨集的原型定義在<assert.h>中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義:
#include <assert.h>void assert( int expression );
assert的作用是現計算表示式 expression ,如果其值為假(即為0),那麼它先向stderr列印一條出錯資訊,然後通過呼叫 abort 來終止程式執行。請看下面的程式清單badptr.c:
#include <stdio.h> #include <assert.h> #include <stdlib.h>int main( void ) { FILE *fp; fp = fopen( "test.txt", "w" );//以可寫的方式開啟一個檔案,如果不存在就建立一個同名檔案 assert( fp ); //所以這裡不會出錯 fclose( fp ); fp = fopen( "noexitfile.txt", "r" );//以只讀的方式開啟一個檔案,如果不存在就開啟檔案失敗 assert( fp );//所以這裡出錯 fclose( fp ); //程式永遠都執行不到這裡來return0; }
[[email protected] error_process]# gcc badptr.c
[[email protected] error_process]# ./a.out
a.out: badptr.c:14: main: Assertion `fp' failed.
已放棄使用assert()的缺點是,頻繁的呼叫會極大的影響程式的效能,增加額外的開銷。在除錯結束後,可以通過在包含#include <assert.h>的語句之前插入 #define NDEBUG 來禁用assert呼叫,示例程式碼如下:
#include <stdio.h>#define NDEBUG #include <assert.h>
用法總結與注意事項:
1)在函式開始處檢驗傳入引數的合法性如:
int resetBufferSize(int nNewSize) { //功能:改變緩衝區大小, //引數:nNewSize 緩衝區新長度 //返回值:緩衝區當前長度 //說明:保持原資訊內容不變 nNewSize<=0表示清除緩衝區 assert(nNewSize >=0); assert(nNewSize <= MAX_BUFFER_SIZE); ... }
2)每個assert只檢驗一個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗,如:
不好:
assert(nOffset>=0&& nOffset+nSize<=m_nInfomationSize);
好:
assert(nOffset >=0); assert(nOffset+nSize <= m_nInfomationSize);
3)不能使用改變環境的語句,因為assert只在DEBUG個生效,如果這麼做,會使用程式在真正執行時遇到問題,如:
錯誤:
assert(i++<100);
這是因為如果出錯,比如在執行之前i=100,那麼這條語句就不會執行,那麼i++這條命令就沒有執行。
正確:
assert(i <100); i++;
4)assert和後面的語句應空一行,以形成邏輯和視覺上的一致感。
5)有的地方,assert不能代替條件過濾。
相關推薦
Python assert 的使用方法
assert巨集的原型定義在<assert.h>中,其作用是如果它的條件返回錯誤,則終止程式執行,原型定義: #include <assert.h>void assert( int expression ); assert的作用是現計算表
python 學習方法
模塊 經驗 utili 交互 class 印象 www 進行 os.path 依據本人的學習經驗,我總結了下面十點和大家分享: 1)學好python的第一步。就是立即到www.python.org站點上下載一個python版本號。我建議剛開始學習的人,不要下載具有ID
Python 魔術方法.
方法 pla 字符串 play bject ins 發現 報錯 如果 ‘123‘ + ‘456‘ ‘123‘.__add__.‘456‘ Python 中,這兩個語句是等價的。具體的說,第二句是第一句的具體實現。當處理‘+’的時候,Python 會去‘+’號的左側
【python】python魔法方法(待填坑)
絕對值 tle init cls -m del __init__ 另一個 trunc 參考博文:http://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html 參考博文英文原版:http://www
Python字典方法
attribute obj raised dict pda getitem items 叠代 closed 字典方法 1 class dict(object): 2 """ 3 dict() -> new empty dictionar
Python列表方法
iter log dex ace name indices ttr eal alt 列表的方法 1 class list(object): 2 """ 3 list() -> new empty list 4 list(it
python魔法方法詳解
返回 call __init__ and -m 描述 nbsp shift 賦值 文章來源:http://blog.csdn.net/koko66/article/details/42709279 據說,Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍
JUnit Assert方法總結
doc isn class unit face oid 判斷 static 成功 assertTrue with error message public static void assertTrue(String message,boolean condition)
Python 特殊方法
def ring __name__ div cnblogs his logs 特殊 clas 1 _int_ 定義在類中,創建類的實例的時候回先調用此方法,用於對該類的一些初始化(例如變量初始化) 2 _str_ def _str_(self):
python 魔法方法(學習過程的筆記)
但是 pow imp int 異或運算 pre bsp beijing getitem 有小夥伴會問,什麽是python的魔法方法,python的魔法方法有什麽用呢, 它們在面向對象的Python的處處皆是。它們是一些可以讓你對類添加“魔法”的特殊方法。 它們經常是兩個下劃
Python的方法及調用
python 方法 首先放一張網上的圖:在類中定義的函數,有的稱為普通函數,有的稱之為方法,Python中有3中方法:實例方法、靜態方法、類方法。實例方法:函數必須有一個self參數類方法:需要有@ classmethod 修飾符,修飾符下面的函數就稱之為類方法,並且有個隱藏參數 cls。靜態方法:需
junit 中的assert 方法
地址 string 多種實現 tro ots nbsp ans 實現 mar junit中的assert方法全部放在Assert類中,總結一下junit類中assert方法的分類。 1.assertTrue/False([String message,]boolean c
[python] 格式化方法 format
引用 聲明 python 不同的 3.1 xxx highlight str import 先介紹包含的所有規則 花括號聲明{}:用於渲染前的參數引用聲明,花括號裏可以用數字代表引用參數的序號,或者變量名直接引用。 從format參數引入的變量名 冒號: 字符位數聲明
Python isnumeric()方法
brush 方法 需要 返回值 light tro ron 定義 返回 描述 isnumeric() 方法檢測字符串是否只由數字組成。這種方法是只針對unicode對象。 註:定義一個字符串為Unicode,只需要在字符串前添加 ‘u‘ 前綴即可,具體可以查看本章節例子。
Python islower()方法
brush pytho 參數 run .... 字母 str print 返回值 描述 islower() 方法檢測字符串是否由小寫字母組成。 語法 islower()方法語法: str.islower() 參數 無。 返回值 如果字符串中包含至少一個區分大小寫的字
Python lstrip()方法
指定 amp 使用方法 pre strip() 空格 logs brush ... 描述 lstrip() 方法用於截掉字符串左邊的空格或指定字符。 語法 lstrip()方法語法: str.lstrip([chars]) 參數 chars --指定截取的字符。 返
Python ljust()方法
log wid 返回值 python3 har () 返回 blog idt 描述 ljust() 方法返回一個原字符串左對齊,並使用空格填充至指定長度的新字符串。如果指定的長度小於原字符串的長度則返回原字符串。 語法 ljust()方法語法: str.ljust(wid
Python zfill()方法
his 對齊 字符串 brush idt usr from string bin 描述 Python zfill() 方法返回指定長度的字符串,原字符串右對齊,前面填充0。 語法 zfill()方法語法: str.zfill(width) 參數 width -- 指定
Python upper()方法
rom 法語 輸出結果 .... clas cnblogs this 小寫 字符串 描述 Python upper() 方法將字符串中的小寫字母轉為大寫字母。 語法 upper()方法語法: str.upper() 參數 NA。 返回值 返回小寫字母轉為大寫字母的字
Python partition() 方法
clas part www 輸出 partition on() 分割 www. str 描述 partition() 方法用來根據指定的分隔符將字符串進行分割。 如果字符串包含指定的分隔符,則返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右