try...except...else...finally...
try: """操作""" except Exception as e: """异常的父类,可以捕获所有的异常""" else: """保护不抛出异常的代码, 当try中无异常的时候执行""" finally: """最后总要执行的"""
raise 当程序运行到raise.程序会被中断.并实例化后面的异常对象.抛给调用方.如果调用方不处理.则会把错误继续向上抛出.最终抛给用户.如果调用方处理了异常,那程序可以正常的进行执行
自定义异常类 只要类继承了Exception类.就是异常类
class GenderError(Exception): pass
val = traceback.format_exc() # 获取到堆栈信息
print(val) #获取错误原因
MD5加密 (不可逆的加密算法)储存密码
import hashlib obj = hashlib.md5(b'abc') # 加盐 obj.update('Grace'.encode('utf-8')) #加密的必须是字节 text = obj.hexdigest() print(text) #b333de1480cafdf03da6d8ed4fd0ba6c
日志 (出现异常的时候,向日志里写错误信息)
import logging logging.basicConfig(filename='x1.txt', format='%(asctime)s - %(name)s - %(levelname)s -% (module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=10) # 当前配置表示 10以上的分数会被写⼊入⽂文件 # CRITICAL = 50 # FATAL = CRITICAL # ERROR = 40 # WARNING = 30 # WARN = WARNING # INFO = 20 # DEBUG = 10 # NOTSET = 0 logging.critical("critical") #50分 logging.error("error") # 40分 logging.warning("warning") # 30 logging.info("info") # 20 logging.debug("debug") # 10 logging.log(2, "definition") #自定义分数
有两个子系统要分开记录日记,要借助文件助手(FileHandler)
import logging # 创建⼀一个操作⽇日志的对象logger(依赖FileHandler) file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8')
file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - % (levelname)s -%(module)s: %(message)s")) logger1 = logging.Logger('s1', level=logging.ERROR)
logger1.addHandler(file_handler) logger1.error('我是A系统') # 再创建⼀一个操作⽇日志的对象logger(依赖FileHandler) file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8')
file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s %(levelname)s -%(module)s: %(message)s")) logger2 = logging.Logger('s2', level=logging.ERROR)
logger2.addHandler(file_handler2) logger2.error('我是B系统')