多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Python之異常處理

Python之異常處理

來源:程序員人生   發布時間:2015-05-22 08:40:40 閱讀次數:3130次

1、甚么是異常?
異常即是1個事件,該事件會在程序履行進程中產生,影響了程序的正常履行。
1般情況下,在Python沒法正常處理程序時就會產生1個異常。
異常是Python對象,表示1個毛病。
當Python腳本產生異常時我們需要捕獲處理它,否則程序會終止履行。
2、異常處理
捕捉異常可使用try/except語句。
try/except語句用來檢測try語句塊中的毛病,從而讓except語句捕獲異常信息并處理。
如果你不想在異常產生時結束你的程序,只需在try里捕獲它。

異常語法:
以下為簡單的try....except...else的語法:

try:
<語句>        #運行別的代碼
except <名字>:
<語句>        #如果在try部分引發了'name'異常
except <名字>,<數據>:
<語句>        #如果引發了'name'異常,取得附加的數據
else:
<語句>        #如果沒有異常產生


try的工作原理是,當開始1個try語句后,python就在當前程序的上下文中作標記,這樣當異常出現時就能夠回到這里,try子句先履行,接下來會產生甚么依賴于履行時是不是出現異常。



try...except的使用方法

try...except用于處理問題語句,捕獲可能出現的異常。try子句中的代碼塊放置可能出現異常的語句,except子句中的代碼塊處理異常。
演示try...except語句捕獲IOError異常
try:
     file("hello.txt", "r")                  #如果文件不存在,引發異常
     print "讀文件"
except IOError:                              #捕獲IO異常
     print "文件不存在"
except:                                     #其它異常
     print "程序異常" 

python與Java的異常處理模式相似,異常處理語句也能夠嵌套,演示以下:
try:
     s = "hello"
     try:
          print s[0] + s[1]
          print s[0] - s[1]
     except TypeError:
          print "字符串不支持減法運算"
except:
     print "異常"
如果外層try子句中的代碼引發異常,程序將直接跳轉到外層try對應的except子句,而內部的try子句將不會被履行。

try...finally的使用方法
try...except后還可以添加1個finally子句。不管異常是不是產生,finally子句都會被履行。所有的finally子句通經常使用于關閉因異常而不能釋放的系統資源。
try:
     f = open("hello.txt", "r")
     try:
          print f.read(5)
     except:
          print "讀文件異常"
     finally:
          print "釋放資源"
          f.close()
except IOError:
     print "文件不存在"

使用raise拋出異常
當程序出現毛病,python會自動引發異常,也能夠通過raise顯示地引發異常。1旦履行了raise語句,raise后面的語句將不能履行。
演示raise用法
try:
     s = None
     if s is None:
         print "s 是空對象"
         raise NameError     #如果引發NameError異常,后面的代碼將不能履行
     print len(s)
except TypeError:
     print "空對象沒有長度"

自定義異常
python允許程序員自定義異常,用于描寫python中沒有觸及的異常情況,自定義異常必須繼承Exception類,自定義異常依照命名規范以"Error"結尾,顯示地告知程序員這是異常。自定義異常使用raise語句引發,而且只能通過人工方式觸發。
from __future__ import division

class DivisionException(Exception):
      def __init__(self, x, y):
            Exception.__init__ (self, x, y)       #調用基類的__init__進行初始化
            self.x = x
            self.y = y

if __name__ == "__main__":
      try:
            x = 3
            y = 2
      if x % y > 0:                               #如果大于0, 則不能被初始化,拋出異常
            print x/y
            raise DivisionException(x, y)
except DivisionException,div:                     #div 表示DivisionException的實例對象
      print "DivisionExcetion: x/y = %.2f" % (div.x/div.y)

assert語句的使用
assert語句用于檢測某個條件表達式是不是為真。assert語句又稱為斷言語句,即assert認為檢測的表達式永久為真,if語句中的條件判斷都可使用assert語句檢測。





附:python標準異常
BaseExceptiona:所有異常的基類
SystemExitb python:解釋器要求退出
KeyboardInterruptc:用戶中斷履行(通常是輸入^C)
Exceptiond:常規毛病的基類
StopIteratione:迭代器沒有更多的值
GeneratorExita:生成器(generator)產生異常來通知退出
SystemExith:Python 解釋器要求退出
StandardErrorg:所有的內建標準異常的基類
ArithmeticErrord:所有數值計算毛病的基類
FloatingPointErrord:浮點計算毛病
OverflowError:數值運算超越最大限制
ZeroDivisionError:除(或取模)零 (所有數據類型)
AssertionErrord:斷言語句失敗
AttributeError:對象沒有這個屬性
EOFError:沒有內建輸入,到達EOF 標記
EnvironmentErrord:操作系統毛病的基類
IOError:輸入/輸出操作失敗
OSErrord:操作系統毛病
WindowsErrorh Windows:系統調用失敗
ImportError:導入模塊/對象失敗
KeyboardInterruptf:用戶中斷履行(通常是輸入^C)
LookupErrord:無效數據查詢的基類
IndexError:序列中沒有無此索引(index)
KeyError:映照中沒有這個鍵
MemoryError:內存溢出毛病(對Python 解釋器不是致命的)
NameError:未聲明/初始化對象 (沒有屬性)
UnboundLocalErrorh:訪問未初始化的本地變量
ReferenceErrore:弱援用(Weak reference)試圖訪問已垃圾回收了的對象
RuntimeError:1般的運行時毛病
NotImplementedErrord:還沒有實現的方法
SyntaxError:Python 語法毛病
IndentationErrorg:縮進毛病
TabErrorg:Tab 和空格混用
SystemError 1般的解釋器系統毛病
TypeError:對類型無效的操作
ValueError:傳入無效的參數
UnicodeErrorh:Unicode 相干的毛病
UnicodeDecodeErrori:Unicode 解碼時的毛病
UnicodeEncodeErrori:Unicode 編碼時毛病
UnicodeTranslateErrorf:Unicode 轉換時毛病
Warningj:正告的基類
DeprecationWarningj:關于被棄用的特點的正告
FutureWarningi:關于構造將來語義會有改變的正告
OverflowWarningk:舊的關于自動提升為長整型(long)的正告
PendingDeprecationWarningi:關于特性將會被廢棄的正告
RuntimeWarningj:可疑的運行時行動(runtime behavior)的正告
SyntaxWarningj:可疑的語法的正告
UserWarningj:用戶代碼生成的正告



Python的Exception層次結構

Exception | +-- SystemExit +-- StopIteration +-- StandardError | | | +-- KeyboardInterrupt | +-- ImportError | +-- EnvironmentError | | | | | +-- IOError | | +-- OSError | | | | | +-- WindowsError | | +-- VMSError | | | +-- EOFError | +-- RuntimeError | | | | | +-- NotImplementedError | | | +-- NameError | | | | | +-- UnboundLocalError | | | +-- AttributeError | +-- SyntaxError | | | | | +-- IndentationError | | | | | +-- TabError | | | +-- TypeError | +-- AssertionError | +-- LookupError | | | | | +-- IndexError | | +-- KeyError | | | +-- ArithmeticError | | | | | +-- OverflowError | | +-- ZeroDivisionError | | +-- FloatingPointError | | | +-- ValueError | | | | | +-- UnicodeError | | | | | +-- UnicodeEncodeError | | +-- UnicodeDecodeError | | +-- UnicodeTranslateError | | | +-- ReferenceError | +-- SystemError | +-- MemoryError | +---Warning | +-- UserWarning +-- DeprecationWarning +-- PendingDeprecationWarning +-- SyntaxWarning +-- OverflowWarning +-- RuntimeWarning +-- FutureWarning


參考文獻:
http://blog.chinaunix.net/uid⑵1505614-id⑶618285.html
http://www.phperz.com/article/14/1009/14507.html
http://blog.chinaunix.net/uid⑵2920230-id⑶074716.html

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 波多野结衣一区二区在线 | 一级a性色生活片久久毛片 一级a性色生活片毛片 | va亚洲va日韩不卡在线观看 | 亚洲国产精品一区 | 另类一区 | 啪啪大片 | 亚洲日韩aⅴ在线视频 | 亚洲小说区图片区另类春色 | miya亚洲私人影院在线 | 那一个欧美一级毛片 | 久久久久国产精品美女毛片 | 亚洲h视频| 泰国一级毛片aaa下面毛多 | 久久精品国产国语对白 | 国产三级做爰高清视频a | 免费观看www | 国产区成人综合色在线 | 性福利影院 | 亚洲国产99在线精品一区二区 | 精品自拍视频在线观看 | 情侣偷偷看的羞羞视频网站 | 亚洲永久在线 | 一级aa毛片 | 影院成人区精品一区二区婷婷丽春院影视 | 91精品福利观看 | 欧美在线观看视频一区 | 欧美人与动人物姣配xxxx | 在线一区国产 | 成人亚洲国产精品久久 | 激情文学激情图片 | 久久久高清 | 中文字幕乱码在线 | 伊人影院在线观看视频 | 欧美肥老太肥50 60 70 | 欧美日韩亚洲一区二区 | 日本xxx网站| 国产精品第二页在线播放 | 欧美videosex | 中文字幕在线影院 | 欧美一级永久免费毛片在线 | 亚洲欧美一区二区三区综合 |