異常狀況(try,raise,traceback)

1.try ....except ....else

若是except後面沒有加東西:就是捕獲全部yichangpython

except <異常名>:捕獲指定異常函數

except <異常名> as <數據>: 捕獲指定異常並將其賦給了<數據>;其中能夠異常有多個,用元組表達ui

 

2.raise   引起異常

2.1 執行了raise後面的就不執行了

def printCount(count):
    if count == 100:
        raise ValueError
    print(count)
# 例子中,當count==100時,會拋出ValueError

  2.2 raise後面跟的語句,是有限制的,必須爲Error或Exception類的子類

# python3中,dir(exceptions)很差用
import builtins
dir(builtins)

2.3 raise後面能夠是一個class、也能夠是一個對象

def printCount(count):
    if count == 100:
        raise ValueError   #這是class
    print(count)

def printCount(count):
    if count == 100:
        raise ValueError("I am error") #這是ValueError的實例對象
    print(count)

3 自定義一個異常類

自定義一個MyException類,繼承Exception編碼

class MyException(Exception):
    def __init__(self,message):
        Exception.__init__(self)
        self.message=message 

若是輸入的數字小於10,就引起一個MyException異常:spa

a=input("please input a num:")
if a<10:
    try:
        raise MyException("my excepition is raised ")
    except MyException as e:
        print (e.message)

運行結果:操作系統

please input a num:1
my excepition is raised調試

 4.traceback 跟蹤異常code

 

try:
    1/0
except Exception,e:
    print e
輸出結果是integer division or modulo by zero,只知道是報了這個錯,可是殊不知道在哪一個文件哪一個函數哪一行報的錯。
下面使用traceback模塊
import traceback
try:
    1/0
except Exception,e:
    traceback.print_exc()
輸出結果是
Traceback (most recent call last):
File "test_traceback.py", line 3, in <module>
1/0

 這樣很是直觀有利於調試。orm

traceback.print_exc()跟traceback.format_exc()有什麼區別呢?
       format_exc()返回字符串,print_exc()則直接給打印出來。
即traceback.print_exc()與print traceback.format_exc()效果是同樣的。
print_exc()還能夠接受file參數直接寫入到一個文件。好比:
traceback.print_exc(file=open('tb.txt','w+'))
寫入到tb.txt文件去

對象

異常名稱 描述
BaseException 全部異常的基類
SystemExit 解釋器請求退出
KeyboardInterrupt 用戶中斷執行(一般是輸入^C)
Exception 常規錯誤的基類
StopIteration 迭代器沒有更多的值
GeneratorExit 生成器(generator)發生異常來通知退出
SystemExit Python 解釋器請求退出
StandardError 全部的內建標準異常的基類
ArithmeticError 全部數值計算錯誤的基類
FloatingPointError 浮點計算錯誤
OverflowError 數值運算超出最大限制
ZeroDivisionError 除(或取模)零 (全部數據類型)
AssertionError 斷言語句失敗
AttributeError 對象沒有這個屬性
EOFError 沒有內建輸入,到達EOF 標記
EnvironmentError 操做系統錯誤的基類
IOError 輸入/輸出操做失敗
OSError 操做系統錯誤
WindowsError 系統調用失敗
ImportError 導入模塊/對象失敗
KeyboardInterrupt 用戶中斷執行(一般是輸入^C)
LookupError 無效數據查詢的基類
IndexError 序列中沒有沒有此索引(index)
KeyError 映射中沒有這個鍵
MemoryError 內存溢出錯誤(對於Python 解釋器不是致命的)
NameError 未聲明/初始化對象 (沒有屬性)
UnboundLocalError 訪問未初始化的本地變量
ReferenceError 弱引用(Weak reference)試圖訪問已經垃圾回收了的對象
RuntimeError 通常的運行時錯誤
NotImplementedError 還沒有實現的方法
SyntaxError Python 語法錯誤
IndentationError 縮進錯誤
TabError Tab 和空格混用
SystemError 通常的解釋器系統錯誤
TypeError 對類型無效的操做
ValueError 傳入無效的參數
UnicodeError Unicode 相關的錯誤
UnicodeDecodeError Unicode 解碼時的錯誤
UnicodeEncodeError Unicode 編碼時錯誤
UnicodeTranslateError Unicode 轉換時錯誤
Warning 警告的基類
DeprecationWarning 關於被棄用的特徵的警告
FutureWarning 關於構造未來語義會有改變的警告
OverflowWarning 舊的關於自動提高爲長整型(long)的警告
PendingDeprecationWarning 關於特性將會被廢棄的警告
RuntimeWarning 可疑的運行時行爲(runtime behavior)的警告
SyntaxWarning 可疑的語法的警告
UserWarning 用戶代碼生成的警告
相關文章
相關標籤/搜索