1. 程式人生 > >python-異常處理與除錯

python-異常處理與除錯

一、常見的異常

出現錯誤的原因:
•有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字串,這種錯誤我們通常稱之為 bug,bug 是必須修復的。
•有的錯誤是使用者輸入造成的,比如讓使用者輸入 email 地址,結果得到一個空字串,這種錯誤可以通過檢查使用者輸入來做相應的處理。
•還有一類錯誤是完全無法在程式執行過程中預測的,比如寫入檔案的時候,磁碟滿了,寫不進去了,這類錯誤也稱為異常,在程式中通常是必須處理的,否則,程式會因為各種問題終止並退出。

## NameError:name 'a' is not defined
# print(a)

## IndexError:list index out of range
# li = [1,2,3] # print(li[6]) ## KeyError: 'e' # d = dict(a=1, b=2) # print(d['e']) ## ZeroDivisionError:division by zero # print(10/0) # FileNotFoundError: # with open('/mnt/pas','w') as f: # f.write()

二、異常處理

• 在程式執行的過程中,如果發生了錯誤,可以事先約定返回一個錯誤程式碼;
• Python語言通常都內建了一套 try…except…finally… 的錯誤處理機制

1.單個錯誤型別處理(捕獲異常,跳過繼續執行):

  • 用 try 來執行可能會出錯的程式碼;
  • 如果執行正確,則except 語句塊不會執行;
  • 如果執行錯誤,直接跳轉至錯誤處理程式碼,即except語句塊;
  • 如果有 finally 語句塊,不管try語句塊內容是否正確,都會執行 finally語句塊
示例:
import os

# 異常處理機制進行捕獲異常; try....except....finally.....
def save_score(filename,score):
    # 將可能出現問題的程式碼放在try語句中;
    try:
        # FileExistsError
os.mknod(filename) print("建立檔案%s成功" %(filename)) # 捕獲異常, 當出現FileExistsError錯誤時, 忽略該錯誤, 不影響後面程式碼的執行; except FileExistsError: print("檔案已存在") with open(filename,'w') as f: f.write(str(score)) print("write success") score = 98 save_score('score.txt',score) ## 第一次執行 /usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/01_常見異常.py 建立檔案score.txt成功 write success ## 第二次執行 /usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/01_常見異常.py 檔案已存在 write success

2.多個錯誤型別處理:

• 錯誤有很多種類,如果發生了不同型別的錯誤,應該由不同的 except語句塊處理。因此可以有多個 except 來捕獲不同型別的錯誤。

try:  ## 只執行一次try中的內容,遇到錯誤退出try,繼續執行後面的語句
    print("hello")
    # print(a) # NameError
    # l = [1,2,3]
    # print(l[8])  # IndexError
    # print(10/0)  # Zero.....Error
# 捕獲異常,
except (IndexError, NameError, ZeroDivisionError) as e:
    print(e)

else:
    # 如果沒有捕獲到異常, 則執行else語句
    print("全部執行成功")
finally:
    print("end")

## try 中無錯誤
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/01_常見異常.py
hello
全部執行成功
end

## try 中有一個錯誤
# 例如:print(a) # NameError
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/01_常見異常.py
hello
name 'a' is not defined
end

## try中出現多個異常時,只執行最先遇到的錯誤後退出
# 例如:print(a) # NameError
       l = [1,2,3]
       print(l[8])  # IndexError
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/01_常見異常.py
hello
name 'a' is not defined
end

3.系統的異常類

• Python 的錯誤其實也是 class,所有的錯誤型別都繼承自BaseException;
• 在使用except 捕獲該型別的錯誤,還把其子類也“一網打盡”;

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

4.丟擲自定義的異常

在引用之前,自定義異常類

class AgeError(Exception):
    pass

age = int(input('Age:'))

if 0 < age < 150:
    print(age)
else:
    raise AgeError("年齡異常")


/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/01_常見異常.py
Age:155
Traceback (most recent call last):
  File "/root/PycharmProjects/day10/01_常見異常.py", line 70, in <module>
    raise AgeError("年齡異常")
__main__.AgeError: 年齡異常

5.exception官方案例

# 捕獲ValueError異常;
while True:
    try:
        x = int(input('Num:'))
        break
    except ValueError as e:
        print(e)

/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/01_常見異常.py
Num:s2
invalid literal for int() with base 10: 's2'
Num:bbba
invalid literal for int() with base 10: 'bbba'
Num:12
# 依次 遍歷B, C, D三個異常
class B(Exception):
    pass

class C(B):
    pass

class D(C):
    pass

# 依次 遍歷B, C, D三個異常
for cls in [B, C, D]:
    try:
        # raise B()
        # raise C()
        raise cls()
    except D:
        print("D")
    except C:
        print("C")
    except B:
        print("B")
## 執行shell命令_檢測異常
import sys

# sys.argv----命令後面跟的引數, 返回一個列表, 列表裡面第一個元素是指令碼名稱;
for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except OSError:
        print('cannot open', arg)
    else:
        # 沒有捕獲到異常, 執行的語句塊;
        print(arg, 'has', len(f.readlines()), 'lines')
        f.close()


[root@foundation10 day10]# chmod +x 02_執行shell命令_檢測異常.py 
[root@foundation10 day10]# ./02_執行shell命令_檢測異常.py /mnt/passwd 
/mnt/passwd has 60 lines
[root@foundation10 day10]# ./02_執行shell命令_檢測異常.py /mnt/passd
cannot open /mnt/passd

相關推薦

python-異常處理除錯

一、常見的異常 出現錯誤的原因: •有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字串,這種錯誤我們通常稱之為 bug,bug 是必須修復的。 •有的錯誤是使用者輸入造成的,比如讓使用者輸入 email 地址,結果得到一個空字串,這種錯誤可

python異常處理除錯,正則表示式

####異常處理與除錯#### 1.cacl包裡沒加if __name__ == "__main__":時,hell.py在呼叫mun中的方法時,會執行mun中的print,加了之後則沒有。 2.錯誤 •有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字元

Python-異常處理調試

python 異常處理與調試一.錯誤1.有的錯誤是程序編寫有問題造成的,比如本來應該輸出整數結果輸出了字符串,這種錯誤我們通常稱之為 bug,bug 是必須修復的。2.有的錯誤是用戶輸入造成的,比如讓用戶輸入 email 地址,結果得到一個空字符串,這種錯誤可以通過檢查用戶輸入來做相應的處理。3.還有一類錯誤

異常處理除錯

錯誤 •   有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字元 串,這種錯誤我們通常稱之為 bug,bug 是必須修復的。  •   有的錯誤是使用者輸入造成的,比如讓使用者輸入 email 地址,結果得到一個空字 符串,這種錯誤可以通過檢查使用者輸入來做

第9章 異常處理程式除錯

本章知識點: 1、try...except語句;2、raise語句;3、assert語句;4、自定義異常;5、程式除錯; 內容: 9.1 異常的處理 9.1.1 Python中的異常        

Python異常捕獲處理

轉載自: JmilkFan:http://blog.csdn.net/jmilk 異常 異常即非正常狀態,在Python中使用異常物件來表示異常。若程式在編譯或執行過程中發生錯誤,程式的執行過程就會發生改變,丟擲異常物件,程式流進入異常處理。如果異常物件沒有被處理或

Python--異常處理--12

body traceback 語法 top 屬性 識別 依賴 內核 lin Python 異常處理 原創博文,轉載請標明出處--周學偉http://www.cnblogs.com/zxouxuewei/ python提供了兩個非常重要的功能來處理python程序在運行中出現

Python異常處理和進程線程-day09

.com bytes 出現 environ lar hold max oci sage 寫在前面 上課第九天,打卡:     最壞的結果,不過是大器晚成; 一、異常處理   - 1.語法錯誤導致的異常     - 這種錯誤,根本過不了python解釋

Python異常處理

處理 eas spa 服務 pen pan 發送 imp perror 1、URLError 錯誤產生原因: 網絡無連接,即本機無法上網 連接不到特定的服務器 服務器不存在 try: except 示例: import urllib2 requset = u

【代碼學習】PYTHON 異常處理

上下文 當前 異常處理 通過 工作 相同 try語句 標記 異常信息 一、什麽是異常   在程序執行過程中可能會影響程序的正常執行,一般情況下,在python無法正常處理程序時就會發生一個異常   當python腳本發生異常時我們需要捕獲處理他,否則程序會終止執行 二、異常

python 異常處理

val cnblogs finall implement pytho 類型 indent lsp ces 一、try...except 有時候我們寫程序的時候,會出現一些錯誤或異常,導致程序終止。例如,做除法時,除數為0,會引起一個ZeroDivisionError 例子:

python--異常處理

ace blog 提示 1=1 兩種 常用 open pytho 允許 異常和錯誤 一:語法錯誤(這種錯誤,根本過不了python解釋器的語法檢測,必須在程序執行前就改正) #語法錯誤示範一 if #語法錯誤示範二 def test: pass #語法錯誤示範三

Python-異常處理

msg 其他 pri nal 類型 __init__ span 不存在 除法 一、捕獲異常 1、當程序出錯時,不會展示bug信息給用戶,而是提供一個友好的提示後,繼續執行程序 2、如下,實現除法,當分母為0時,捕獲並打印出異常信息;Exception可以捕獲任何異常 de

day14-python異常處理

val ioerror python異常 memory enc ast 標記 tor back 1. 異常 異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。 一般情況下,在Python無法正常處理程序時就會發生一個異常。異常是Python對象,

一文掌握 Python 異常處理的所有知識點

原因 情況 例如 microsoft interrupt center 簡單 兩個 修復 異常處理在任何一門編程語言裏都是值得關註的一個話題,良好的異常處理可以讓你的程序更加健壯,清晰的錯誤信息更能幫助你快速修復問題。在Python中,和部分高級語言一樣,使用了try/ex

Python 異常處理

不能 attr 沒有 library 錯誤信息 調用 自動 error money 一,異常處理 在程序運行的過程中,如果發生了錯誤,可以事先約定返回一個錯誤代碼,這樣,就可以知道是否有錯,以及出錯的原因。 高級語言通常都內置了一套try...except...finall

Python.異常處理

執行 aso 一個 sum eas opera except cal 異常檢測 Python異常大全: 異常檢測: try: 檢測範圍 except Exception [as reason]: 出現Exception異常後的處理代碼 finall

異常處理內建模塊

得到 代碼塊 結果 ict min enc nbsp AS from 一、異常處理 1.1、異常常用格式 try:      #try接代碼塊,如果代碼正常則不執行except塊 print(2/0)except Exception as e:   #except捕

python學習筆記-day8-2-【python 異常處理 try except】

finall 沒有 class cond col pytho span try 學習 python的異常處理,與其它語言的異常一樣,當錯誤發生的時候,能捕獲到發生的錯誤,不會導致程序crash。 一、try except 1、 try except Exception,

python異常處理--try except else raise finally

-- 用戶 exceptio .... 異常處理 auth AS range 分享圖片 寫程序時遇到異常情況,程序可能無法正常運行。此時就需要引入異常處理 1.try ...except try 後面寫正常運行的程序代碼,except即為異常情況 1 a=3 2 b=