1. 程式人生 > >異常處理,MD5

異常處理,MD5

 異常處理. try except raise
try:
程式碼
except 異常類:
除了錯, 如何處理異常
except 異常類:
除了錯, 如何處理異常
except 異常類:
除了錯, 如何處理異常

else:
當程式不出錯
finally:
不管出不出錯, 都要執行


raise 異常類("資訊")

如何自己定義異常
class 類(Exception):
pass

堆疊
import traceback
traceback.format_exc()
# print(1/0) # 報錯. 程式會結束執行
# print("哈哈哈哈哈哈哈")
# 0不能作為除數 ,  在程式執行的時候產生了一個錯誤物件.
# 系統會丟擲這個錯誤. 如果沒有人處理錯誤. 錯誤就會被噴出給使用者


# 處理異常: 在python中可以通過try....except...來處理錯誤
# try:
#     print(1/0)
# except Exception:
#     print('出錯了')
# print('哈哈')   # 可以正常執行下去
# 所有的異常的根是Exception, 所有的異常類都會預設繼承Exception
# 錯誤
# 打架錯誤  鬥毆錯誤  賭博錯誤

# try:
#     # print(1/0)
#     f = open('哈哈哈哈', mode='r')
#     # d = {[]: 123}
# except ZeroDivisionError:
#     print('除以0出錯了')
# except FileNotFoundError:
#     print('檔案不存在的錯誤')
# except Exception:   # 兜底的
#     print('其他錯誤')
# else:   # 當try中的程式碼不產生任何錯誤的時候,會自動的執行else裡的程式碼
#     pass
# finally:    # 最終,不管出錯還是不出錯,都要執行最後的finally 一般用來收尾
#     print('哈哈哈哈哈哈哈哈哈')


# 如何自己定義異常
# 隨便寫一個類. 這個類只要繼承了Exception 這個類就是一個異常類就可以作為raise物件
# class CulException(Exception):
#     pass
#
# # 如何手動丟擲異常
# def cul(a, b):
#     # 只能是數字相加
#     if (type(a) == int or type(a) == float ) and (type(b) == int or type(b) == float):
#         return a + b
#     else:
#         # 丟擲異常
#         # raise 異常類(錯誤資訊)
#         raise CulException("我沒辦法給你處理這樣的運算")
#
#
# print(cul("就不放, 氣死你",2))
#
#
# class JackException(Exception):
#     pass

# 寫一個男澡堂子
import traceback # 用來檢視堆疊資訊

class GenderException(Exception):
    pass

class Person:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def xizao(self):
        print(f"{self.name}在洗澡")

def nan_zao_tang_zi(ren):
    if ren.gender == "男":
        ren.xizao()
    else:
        raise GenderException("性別不對. 去對門看看")  # 拋異常是很重要的

try:
    p1 = Person("趙亞磊", "不知道")
    p2 = Person("婁鯤鵬", "男")

    nan_zao_tang_zi(p1)
    nan_zao_tang_zi(p2)
except GenderException:
    # ret = traceback.format_exc() # 檢視堆疊資訊, 看錯誤的
    # print(ret)
    print("出錯了. 很可惜")


# 錯誤資訊叫堆疊資訊

  

MD5加密
import hashlib

obj = hashlib.md5(b'鹽')
obj.update(b"要加密的內容")
print(obj.hexdigest())
# 加密,不可逆 相對安全
import hashlib

# md5物件
# obj = hashlib.md5(b'dsadasdasdas')  # 加鹽
# obj.update('123456'.encode("utf-8"))    # 把要加密的內容給md5
# print(obj.hexdigest())  # 拿到密文  82f69062874319af1af5024f39f62f41

def my_md5(s):
    obj = hashlib.md5(b'dsadasdasdas')  # 加鹽
    obj.update(s.encode("utf-8"))    # 把要加密的內容給md5
    return obj.hexdigest()

# print(my_md5('123456'))     #   82f69062874319af1af5024f39f62f41
# 應用
# 庫裡
username = 'wusir'
password = '82f69062874319af1af5024f39f62f41'

uname = input('請輸入你的使用者名稱:')
upwd = input('請輸入你的密碼:')    # 123456
if uname == username and my_md5(upwd) == password:
    print('登入成功')
else:
    print('登入失敗')