python3 異常學習筆記(19)

2021-10-04 02:55:08 字數 2565 閱讀 2593

#python的異常

#異常處理try/except

#異常捕捉可以使用 try/except 語句。

'''try:

被執行的**

except:

產生異常時執行的**

try 語句按照如下方式工作;

首先,執行 try 子句(在關鍵字 try 和關鍵字 except 之間的語句)。

如果沒有異常發生,忽略 except 子句,try 子句執行後結束。

如果在執行 try 子句的過程中發生了異常,那麼 try 子句餘下的部分將被忽略。如果異常的型別和 except 之後的名稱相符,那麼對應的 except 子句將被執行。

如果乙個異常沒有與任何的 excep 匹配,那麼這個異常將會傳遞給上層的 try 中。

乙個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有乙個分支會被執行。

處理程式將只針對對應的 try 子句中的異常進行處理,而不是其他的 try 的處理程式中的異常。

乙個except子句可以同時處理多個異常,這些異常將被放在乙個括號裡成為乙個元組,例如:

except (runtimeerror, typeerror, nameerror):

pass

最後乙個except子句可以忽略異常的名稱,它將被當作萬用字元使用

try/except 語句還有乙個可選的 else 子句,如果使用這個子句,那麼必須放在所有的 except 子句之後。

else 子句將在 try 子句沒有發生任何異常的時候執行。

try:

語句except:

語句else:

語句'''import sys

try:

a=2/0

except zerodivisionerror as e:

print(e) #division by zero 被0除

for arg in sys.ar**[1:]:

try:

f = open(arg, 'r')

except ioerror:

print('cannot open', arg)

else:

print(arg, 'has', len(f.readlines()), 'lines')

f.close()

#try-finally 語句無論是否發生異常都將執行finally的**。

try:

print("請輸入乙個數字:")

num=int(input())

except valueerror:

print("你輸入的不是乙個數字")

else:

print("輸入正確!")

finally:

print('輸入完成!')

'''輸入:3

將輸出以下內容:

3輸入正確!

輸入完成!

輸入:a

將輸出以下內容:

a你輸入的不是乙個數字

輸入完成!

else中的**在未發生異常時執行,而finally中的**一直會執行

''''''

丟擲異常

python 使用 raise 語句丟擲乙個指定的異常。

raise語法格式如下:

raise [exception [, args [, traceback]]]

'''''' 例如

str='abcde'

if len(str)>2:

raise exception('字串的長度過長')

''''''

使用者自定義異常

可以通過建立乙個新的異常類來擁有自己的異常。異常類繼承自 exception 類,可以直接繼承,或者間接繼承,

'''class myerror(exception):

def __init__(self, value):

self.value = value

def __str__(self):

return repr(self.value)

try:

raise myerror(2*2)

except myerror as e:

print('my exception occurred, value:', e.value)

'''try:

raise myerror(2*2)

finally:

print("this finally")

'''#如果乙個異常在 try 子句裡(或者在 except 和 else 子句裡)被丟擲,而又沒有任何的 except 把它截住,那麼這個異常會在 finally 子句執行後被丟擲。

for line in open("f:/python/pythontest.txt"):

print(line, end="")

#以上這段**的問題是,當執行完畢後,檔案會保持開啟狀態,並沒有被關閉。

with open("f:/python/pythontest.txt") as f:

for line in f:

print(line, end="")

Python3學習筆記 裝飾器,異常處理

裝飾器本質上是乙個python函式,它可以讓其他函式在不需要做任何 邊動的前提下增加額外的功能,裝飾器返回值也是乙個函式物件。簡單來說,裝飾器的作用就是為已經存在的物件新增額外的功能。裝飾器分為幾種 簡單裝飾器 def use logging func def args,kwargs logging...

Python3學習筆記

最近在起步學python,聚合一下這個過程中蒐集的資源和對一些基本知識做個小總結,語法基於python3,方便以後查詢。python官方文件 不錯的基礎課程 基本語法 演算法 建模 練習 以下是整理常用可能遺忘的基礎點 python3中的輸入是input 獲得使用者輸入的字串 a input ple...

python3學習筆記

redis訊息佇列的使用 coding utf 8 created on tue mar 26 15 58 34 2019 author admin import redis class redisqueue object def init self,name,namespace queue red...