亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中的異常處理學(xué)習(xí)筆記

 更新時(shí)間:2015年01月28日 16:28:46   投稿:junjie  
這篇文章主要介紹了Python中的異常處理學(xué)習(xí)筆記,本文講解了常見(jiàn)的異常類、自定義異常類、捕獲異常、拋出異常、上下文管理器等內(nèi)容,需要的朋友可以參考下

Python 是面向?qū)ο蟮恼Z(yǔ)言,所以程序拋出的異常也是類。

常見(jiàn)的異常類

1.NameError:嘗試訪問(wèn)一個(gè)沒(méi)有申明的變量
2.ZeroDivisionError:除數(shù)為 0
3.SyntaxError:語(yǔ)法錯(cuò)誤
4.IndexError:索引超出序列范圍
5.KeyError:請(qǐng)求一個(gè)不存在的字典關(guān)鍵字
6.IOError:輸入輸出錯(cuò)誤(比如你要讀的文件不存在)
7.AttributeError:嘗試訪問(wèn)未知的對(duì)象屬性
8.TypeError:傳給函數(shù)的參數(shù)類型不正確,比如給 int 函數(shù)傳入字符型

自定義異常類

盡管內(nèi)建的異常類已經(jīng)包括大部分情況,但如果需要?jiǎng)?chuàng)建自己的異常類,可以采用下面的方法:

復(fù)制代碼 代碼如下:

class CustomException(Exception): # Exception 為所有異常的基類
    # 處理異常的代碼

捕獲異常

復(fù)制代碼 代碼如下:

try: 
   # 需要進(jìn)行捕獲異常的代碼,只有出現(xiàn)異常之前的代碼被最終執(zhí)行
except (Exception1,Exception2,...) as argument: 
   # 捕獲到 (Exception1,Exception2,...) 里的異常才執(zhí)行本段代碼
   # argument 是一個(gè)異常類的實(shí)例,包含異常的具體信息
except:
   # 捕獲到 (Exception1,Exception2,...) 以外的異常執(zhí)行本段代碼,用 sys 模塊的 exc_info() 函數(shù)可以獲取異常信息
else: 
   # 如果沒(méi)有捕獲到異常則執(zhí)行本段代碼
finally: 
   # 無(wú)論是否捕獲到異常都執(zhí)行本段代碼

上述語(yǔ)句并不都是必須的,譬如 try...except...、try...finally... 或者 try...except...else... 語(yǔ)句都是可行的。我們還可以 用 try...except...else... 代替 if...else...。

拋出異常

如果我們想要在自己編寫(xiě)的程序中主動(dòng)拋出異常,可以采用如下兩種方法:

raise Exception(reason)

Exception 必須是一個(gè)異常類的名稱。可選項(xiàng) reason 用來(lái)傳遞異常的信息。

assert expression[,reason]

assert 是斷言的關(guān)鍵字。當(dāng)表達(dá)式 expression 為真則什么都不做,否則拋出 AssertionError 異常。reason 提供異常的信息。

上下文管理器

由于對(duì)象 File 支持上下文管理協(xié)議,因此可以采用下面的方法打開(kāi)文件:

復(fù)制代碼 代碼如下:

with open('filename') as fp:
   # 無(wú)論本段代碼是否出現(xiàn)異常,文件對(duì)象 fp 均能正確關(guān)閉

Example

復(fù)制代碼 代碼如下:

import sys

def div(num, den):
 print('_________________   (',num,',',den,')\n')
 try:
  ans = num/den
  assert den != num, 'Equal' # 斷言:分子分母不相等
  den = 'Changed'            # 如果執(zhí)行本語(yǔ)句之前未出現(xiàn)異常,改變 den 的值
  if num % 2:                # 如果分子為奇數(shù),則拋出異常
   raise ValueError('Odd')
 except ZeroDivisionError as e:
  print('except ... as ...\n\t', e)
 except:
  print('except\n\t', sys.exc_info())
 else:
  print('else\n\t', ans)
 finally:
  print('finally\n\t', den)

div(1,0) # 除數(shù)為零,為 ZeroDivisionError 異常類
div(1,1) # 分子等于分母,斷言為假,拋出異常
div(2,1) # 無(wú)異常
div(3,1) # 分子為奇數(shù),通過(guò) raise 拋出異常
div(3,'x') # 不屬于 ZeroDivisionError 的其他異常


運(yùn)行結(jié)果:
復(fù)制代碼 代碼如下:

_________________   ( 1 , 0 )

except ... as ...
  division by zero
finally
  0
_________________   ( 1 , 1 )

except
  (<class 'AssertionError'>, AssertionError('Equal',), <traceback object at 0x00000000029B42C8>)
finally
  1
_________________   ( 2 , 1 )

else
  2.0
finally
  Changed
_________________   ( 3 , 1 )

except
  (<class 'ValueError'>, ValueError('Odd',), <traceback object at 0x00000000029B42C8>)
finally
  Changed
_________________   ( 3 , x )

except
  (<class 'TypeError'>, TypeError("unsupported operand type(s) for /: 'int' and 'str'",), <traceback object at 0x00000000029B42C8>)
finally
  x

相關(guān)文章

  • Python 利用scrapy爬蟲(chóng)通過(guò)短短50行代碼下載整站短視頻

    Python 利用scrapy爬蟲(chóng)通過(guò)短短50行代碼下載整站短視頻

    近日,有朋友向我求助一件小事兒,他在一個(gè)短視頻app上看到一個(gè)好玩兒的段子,想下載下來(lái),可死活找不到下載的方法。經(jīng)過(guò)我的一番研究才找到解決方法,下面小編給大家分享Python 利用scrapy爬蟲(chóng)通過(guò)短短50行代碼下載整站短視頻的方法,感興趣的朋友一起看看吧
    2018-10-10
  • 用python爬取中國(guó)大學(xué)排名網(wǎng)站排名信息

    用python爬取中國(guó)大學(xué)排名網(wǎng)站排名信息

    大家好,本篇文章主要講的是用python爬取中國(guó)大學(xué)排名網(wǎng)站排名信息,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Python實(shí)現(xiàn)操作Redis的高級(jí)用法分享

    Python實(shí)現(xiàn)操作Redis的高級(jí)用法分享

    redis-py是Python操作Redis的第三方庫(kù),它提供了與Redis服務(wù)器交互的API,本文為大家介紹了Python利用redis-py操作Redis的高級(jí)用法,需要的可以收藏一下
    2023-05-05
  • Python爬蟲(chóng)獲取數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中的超詳細(xì)教程(一看就會(huì))

    Python爬蟲(chóng)獲取數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中的超詳細(xì)教程(一看就會(huì))

    使用爬蟲(chóng)爬數(shù)據(jù),總要涉及到數(shù)據(jù)持久化,也就是數(shù)據(jù)存儲(chǔ)的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Python爬蟲(chóng)獲取數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中的超詳細(xì)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python netmiko模塊的使用

    Python netmiko模塊的使用

    這篇文章主要介紹了Python netmiko模塊的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 基于python繪制科赫雪花

    基于python繪制科赫雪花

    這篇文章主要為大家詳細(xì)介紹了基于python繪制科赫雪花,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 一篇文章教你掌握python數(shù)據(jù)類型的底層實(shí)現(xiàn)

    一篇文章教你掌握python數(shù)據(jù)類型的底層實(shí)現(xiàn)

    這篇文章主要介紹了Python 數(shù)據(jù)類型的底層實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • Python的Tornado框架異步編程入門實(shí)例

    Python的Tornado框架異步編程入門實(shí)例

    這篇文章主要介紹了Python的Tornado框架異步編程入門實(shí)例,異步編程的思維與普通編程比起來(lái)有些不同,需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)動(dòng)態(tài)二維碼生成的示例代碼

    Python實(shí)現(xiàn)動(dòng)態(tài)二維碼生成的示例代碼

    這篇文章主要和大家分享兩個(gè)制作二維碼的Python庫(kù),可以生成普通的二維碼、圖片背景版二維碼、動(dòng)圖GIF版二維。文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Python利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作

    Python利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作

    Appium 是一個(gè)開(kāi)源、跨平臺(tái)的自動(dòng)化測(cè)試工具,用于測(cè)試原生和輕量移動(dòng)應(yīng)用,支持 iOS, Android 和 FirefoxOS 平臺(tái)。本文將利用appium實(shí)現(xiàn)模擬手機(jī)滑動(dòng)操控的操作,感興趣的可以了解一下
    2022-07-07

最新評(píng)論