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=