1. 程式人生 > >Python assert 的使用方法

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 會去‘+’號的左側

pythonpython魔法方法(待填坑)

絕對值 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元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右