1. 程式人生 > >Python3-筆記-D-001-異常與斷言

Python3-筆記-D-001-異常與斷言

class pre demo 定義 拋出異常 筆記 int 同時 pytho

import sys
# === 捕獲異常 (可靈活組合) ===
def excep():
# - try except -
try:
print(ex)
except: # 捕獲所有異常
print("捕獲異常!")

try:
print(ex)
except: # 通過函數獲取異常信息
types, value, back = sys.exc_info() # 捕獲異常
sys.excepthook(types, value, back) # 打印異常

try:
print(ex)
except NameError: # 捕獲指定異常
print("捕獲名字未定義異常!")
except IOError:
print("捕獲IO異常!")
except:
print("捕獲所有異常!")

try:
print(ex)
except (NameError, IOError) as e: # 同時捕獲多個異常, 並告知異常原因
print("捕獲多個異常!")
print(e)
except:
print("捕獲所有異常!")


# - try except else -
try:
pass
except:
print("捕獲異常!")
else: # 沒有發生異常是執行該代碼塊
print("運行正常.")

# - try except else finally -
try:
pass
except:
print("捕獲異常!")
else:
print("運行正常.")
finally: # 不管是否發生異常都執行
print("不管是否發生異常都執行")




# === 自定義異常 ===
# - 編寫自定義異常 -
class MyError(Exception): # 繼承 Exception

# 重寫並super構造
def __init__(self, mes = "拋出一個異常."):
Exception.__init__(self)
self.message = mes

def __str__(self):
return self.message


# - 使用自定義異常 -
def myerr():
try:
raise MyError("拋異常!") # 拋出異常
except MyError as e: # 接住異常
print(e)


# === 斷言語句 ===
def assertdemo():
# 斷言一般用於測試, 如果測試結果為Flase,將拋出AssertionError異常
assert type("string") is str
assert 3 < 4
assert 3 > 4, "AssertionError異常"

# ======= 函數調用 ======
if __name__ == "__main__":
excep()
myerr()
assertdemo()

Python3-筆記-D-001-異常與斷言