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

Python異常處理例題整理

 更新時(shí)間:2019年07月07日 10:54:53   作者:熊貓_water  
在本篇文章里

什么是異常?

異常是Python對象,表示一個(gè)錯(cuò)誤。當(dāng)Python腳本發(fā)生異常時(shí)我們需要捕獲處理它,否則程序會終止執(zhí)行。在程序運(yùn)行過程中,總會遇到各種各樣的錯(cuò)誤,有的錯(cuò)誤是程序編寫有問題造成的

還有一類錯(cuò)誤是完全無法在程序運(yùn)行過程中預(yù)測的:一切異常皆是對象

系統(tǒng)定義的異常:

  • BaseException 所有異常的基類,父類
  • Exception 常規(guī)錯(cuò)誤的基類
  • StandardError 所有的內(nèi)建標(biāo)準(zhǔn)異常的基類,標(biāo)準(zhǔn)化錯(cuò)誤
  • ImportError  導(dǎo)入模塊錯(cuò)誤
  • ArithmeticError 所有數(shù)值計(jì)算錯(cuò)誤的基類
  • FloatingPointError 浮點(diǎn)計(jì)算錯(cuò)誤
  • AssertionError  斷言語句失敗
  • AttributeError  對象沒有這個(gè)屬性
  • Warning 警告的基類警告類

也可以自定義異常,創(chuàng)建類,

異常處理的作用是:

1:不想讓程序終止

2:如果出錯(cuò)了,需要特殊處理

異常處理的語法是:try/except語句,有的后面也會加else

try:
  a = 2
  b = 0
  print a / b
except:
  print '出錯(cuò)啦!?。?

print 1111

try ....except...else 語句,當(dāng)沒有異常發(fā)生時(shí),else中的語句將會被執(zhí)行。

a=10
b=1
try:
  c = b/ a
  print c
except (IOError ,ZeroDivisionError),x:
  print x
else:
  print "no error"
print "done"

使用except而不帶任何異常類型: except,后面不寫,表示捕獲所有異常

try:
  正常的操作
  ......................
except:
  發(fā)生異常,執(zhí)行這塊代碼
  ......................
else:
  如果沒有異常執(zhí)行這塊代碼

使用except而帶多種異常類型: except,后面寫,捕獲對應(yīng)的異常,

except:

0.不寫異常代表捕獲一些類型的錯(cuò)誤
1.可以一次捕捉多個(gè)異常 (exception1, exception2)
2.多個(gè)except:
不要求從小到大捕捉
3.可以在except語句塊后面加一個(gè)else,當(dāng)沒有錯(cuò)誤發(fā)生時(shí),會自動執(zhí)行else語句
4.e代表當(dāng)前異常的實(shí)例 print可以顯示錯(cuò)誤信息  , e  or as e

5.如果想要輸出詳細(xì)堆棧信息,使用import traceback traceback.print_exc()

舉例說明5:雖然錯(cuò)誤堆棧信息打印出來了,但是程序還是在繼續(xù)執(zhí)行的

import traceback
try:
  print 5/0
except (TypeError,ZeroDivisionError) as e:
  traceback.print_exc()
  print e.message
else:
  print 3
print 2

運(yùn)行結(jié)果:

如果想打印異常的信息,可以 設(shè)置as 別名,然后通過別名.message,來捕獲異常信息,如下例子所示

try:
  正常的操作
  ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
  發(fā)生以上多個(gè)異常中的一個(gè),執(zhí)行這塊代碼
  ......................
else:
  如果沒有異常執(zhí)行這塊代碼
except ZeroDivisionError: ##捕獲被除數(shù)不能等于0的異常
except BaseException:##也可以直接寫這個(gè)所有異常的基類
try:
  a = 2
  b = 0
  print a / b
except ZeroDivisionError as e :
  print e.message #捕獲異常信息
  print '出錯(cuò)啦?。?!'

print 1111

執(zhí)行結(jié)果:

integer division or modulo by zero
出錯(cuò)啦?。?!

1111

try except的兩個(gè)作用:

  • 可以提高代碼健壯性,
  • 捕獲異常,巧妙的避開報(bào)錯(cuò)的信息

try-finally 語句:try-finally 語句無論是否發(fā)生異常都將執(zhí)行最后的代碼。

try:
<語句>
finally:
<語句>  #退出try時(shí)總會執(zhí)行
raise

finally: # 不管try except是否出錯(cuò),都會打印出finally文件里面的東西,可以看下如下例子:

1:如果try里面東西沒有執(zhí)行成功,try里面的print也不會打印的,

2:finally里面的東西不管try except是否出錯(cuò),都會打印

def jianfa(a,b):
  if a<b:
    raise BaseException('被減數(shù)不能小于減數(shù)')
    #return 0
  else:
    return a-b
try:
  print jianfa(0, 3)
  print 'huice' #不打印
except:
  pass
finally:
  print 111

拋出異常

拋出解釋:如果錯(cuò)誤沒有被捕獲,它就會一直往上拋,最后被Python解釋器捕獲,打印一個(gè)錯(cuò)誤信息,然后程序退出:語法:raise 異常類名 (錯(cuò)誤信息)

練習(xí)題:#1.編寫一個(gè)計(jì)算減法的方法,當(dāng)?shù)谝粋€(gè)數(shù)小于第二個(gè)數(shù)時(shí),拋出“被減數(shù)不能小于減數(shù)"的異常

def jianfa(a,b):
  if a<b:
    raise BaseException('被減數(shù)不能小于減數(shù)')
    #return 0
  else:
    return a-b
print jianfa(1, 3)

執(zhí)行結(jié)果如下:

練習(xí)題:

1.從開發(fā)的代碼庫中得到一組數(shù)據(jù),表示每個(gè)文件的代碼變更情況

{'login.py': 'a 8 d 2 u 3', 'order.py': 'a 15 d 0 u 34', 'info.py': 'a 1 d 20 u 5'}

其中 a表示新增行數(shù),d表示刪除行數(shù),u表示修改行數(shù)。login.py的變更行數(shù)為13

要求:統(tǒng)計(jì)出每個(gè)文件的變更行數(shù)

第一種方法:通過if語句,判斷

data={'login.py': 'a 8 d 2 u 3', 'order.py': 'a 15 d 0 u 34', 'info.py': 'a 1 d 20 u 5'}
for k,v in data.items():
  sum=0
  for x in data[k].split(' '):
    if x.isdigit():
      sum+=int(x)
  print '文件:%s,共變更%d行'%(k,sum)

執(zhí)行結(jié)果:

文件:login.py,共變更13行
文件:info.py,共變更26行

文件:order.py,共變更49行

第二種方法:通過try 方法:

data={'login.py': 'a 8 d 2 u 3', 'order.py': 'a 15 d 0 u 34', 'info.py': 'a 1 d 20 u 5'}
for k,v in data.items():
  sum=0
  for x in data[k].split(' '):
    try:
      sum+=int(x) #通過try except方法捕獲異常,巧妙的實(shí)現(xiàn)
    except:
      pass
  print '文件:%s,共變更%d行'%(k,sum)

2 定義一個(gè)函數(shù)func(listinfo) listinfo:為列表,listinfo = [133, 88, 24, 33, 232, 44, 11, 44],返回列表小于100,且為偶數(shù)的

def func(listinfo):
  for x in listinfo:
    try:
      result = filter(lambda k: k < 100 and k % 2 == 0, listinfo)
    except Exception as a:
      return a
    else:
      return result
print func([133, 88, 24, 33, 232, 44, 11, 44])

輸出:[88, 24, 44, 44]

class my_error(Exception):
  def __init__(self, stri):
    self.leng = len(stri)

  def process(self):
    if self.leng < 5:
      return 'The input is of length %s,expecting at least 5' % self.leng
    else:
      return 'print success'


try:
  raise my_error('sssss')
except my_error as e:
  print e.process() 

相關(guān)文章

  • python自動安裝pip

    python自動安裝pip

    這篇文章主要介紹了python自動安裝pip的示例,需要的朋友可以參考下
    2014-04-04
  • 使用?OpenCV-Python?識別答題卡判卷功能

    使用?OpenCV-Python?識別答題卡判卷功能

    這篇文章主要介紹了使用?OpenCV-Python?識別答題卡判卷,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • python實(shí)現(xiàn)布隆過濾器及原理解析

    python實(shí)現(xiàn)布隆過濾器及原理解析

    布隆過濾器( BloomFilter )是一種數(shù)據(jù)結(jié)構(gòu),比較巧妙的概率型數(shù)據(jù)結(jié)構(gòu)(probabilistic data structure),特點(diǎn)是高效地插入和查詢,可以用來告訴你 “某樣?xùn)|西一定不存在或者可能存在”。這篇文章主要介紹了python實(shí)現(xiàn)布隆過濾器 ,需要的朋友可以參考下
    2019-12-12
  • Python腳本,標(biāo)識符,變量使用,腳本語句,注釋,模塊引用詳解

    Python腳本,標(biāo)識符,變量使用,腳本語句,注釋,模塊引用詳解

    這篇文章主要為大家詳細(xì)介紹了Python腳本,標(biāo)識符,變量使用,腳本語句,注釋,模塊引用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python?PyWebIO開發(fā)Web應(yīng)用實(shí)例探究

    Python?PyWebIO開發(fā)Web應(yīng)用實(shí)例探究

    這篇文章主要為大家介紹了Python?PyWebIO開發(fā)Web應(yīng)用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Python字典操作簡明總結(jié)

    Python字典操作簡明總結(jié)

    這篇文章主要介紹了Python字典操作簡明總結(jié),本文總結(jié)了創(chuàng)建字典 、創(chuàng)建一個(gè)"默認(rèn)"字典、遍歷字典、獲得value值、成員操作符:in或not in 、更新字典、刪除字典等常用操作,需要的朋友可以參考下
    2015-04-04
  • python調(diào)用百度AI接口實(shí)現(xiàn)人流量統(tǒng)計(jì)

    python調(diào)用百度AI接口實(shí)現(xiàn)人流量統(tǒng)計(jì)

    這篇文章主要介紹了python調(diào)用百度AI接口實(shí)現(xiàn)人流量統(tǒng)計(jì),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 簡單了解Django模板的使用

    簡單了解Django模板的使用

    這篇文章主要介紹了簡單了解Django模板的使用,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python 切片索引越界的問題(數(shù)組下標(biāo)越界)

    Python 切片索引越界的問題(數(shù)組下標(biāo)越界)

    Python語言處理字符串、數(shù)組類的問題時(shí)有一定概率需要使用切片方法,本文主要介紹了Python 切片索引越界的問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • python opencv實(shí)現(xiàn)證件照換底功能

    python opencv實(shí)現(xiàn)證件照換底功能

    這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)證件照換底功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論