当前位置: 首页 > news >正文

百度云网站开发怎样开网站洛阳网站建设联系方式

百度云网站开发怎样开网站,洛阳网站建设联系方式,名牌网站设计的图片,上海包装设计目录 一、类的约束二、异常处理#xff1a;三、MD5加密四、日志#xff08;logging模块#xff09;一、类的约束 真正写写项目的代码时都是多人协作的#xff0c;所以有些地方需要约束程序的结构。也就是说#xff0c;在分配任务之前就应该把功能定义好#xff0c;然后分… 目录 一、类的约束二、异常处理三、MD5加密四、日志logging模块 一、类的约束 真正写写项目的代码时都是多人协作的所以有些地方需要约束程序的结构。也就是说在分配任务之前就应该把功能定义好然后分别交给底下的程序员来完成相应的功能。 在python中有两种办法来约束类的方法 第一种方法使用继承的特性提取⽗类然后在⽗类中定义好⽅法在这个⽅法中什么都不⽤⼲就抛⼀个异常就可以了。这样所有的⼦类都必须重写这个⽅法否则访问的时候就会报错。class Base:def run(self):raise NotImplementedError(子类没有实现login方法)class Foo1(Base):def run(self):print(Foo1\s Function)class Foo2(Base):def run(self):print(Foo2\s Function)class Foo3(Base):def run3(self): # Foo3中没有按规范重写run方法这里会报错print(Foo3\s Function)l1 [Foo1(), Foo2(), Foo3()] for item in l1:item.run() 结果如下 第二种方法是使⽤元类来描述⽗类在元类中给出⼀个抽象⽅法这样⼦类就不得不给出抽象⽅法的具体实现也可以起到约束的效果。from abc import ABCMeta, abstractmethod # 导入抽象元类和定义抽象方法的装饰器class Aminal(metaclassABCMeta): # 在创建类的时候指定要使用ABCMeta元类abstractmethoddef eat(self): # 然后定义了一个抽象方法passclass Cat(Aminal):passc Cat() c.eat() 上面的结果告诉我们必须要实现抽象类才能实例化这个对象手动重写这个方法后就能正常使用了 from abc import ABCMeta, abstractmethodclass Aminal(metaclassABCMeta):abstractmethoddef eat(self):passclass Cat(Aminal):def eat(self):print(猫抓老鼠)c Cat() c.eat()# 结果 # 猫抓老鼠 总结: 约束. 其实就是⽗类对⼦类进⾏约束. ⼦类必须要写xxx⽅法. 在python中约束的⽅式和⽅法有两种: 使⽤抽象类和抽象⽅法, 由于该⽅案来源是java和c#. 所以使⽤频率还是很少的使⽤⼈为抛出异常的⽅案. 并且尽量抛出的是NotImplementError. 这样比较专业, ⽽且错误比较明确.(推荐)二、异常处理 异常所谓异常就是程序在运行过程中出现的异常这种是事先不能预知的只有在程序运行时才会出现所以我们要编写异常处理的程序来应对。 try:坑能抛出异常的语句except 异常1:捕获异常1时处理的步骤except 异常2:捕获异常2时处理的步骤finally:try语句块最后执行的操作 解读程序先执⾏操作, 然后如果出错了会走except中的代码如果不出错, 执⾏else中的代码。不论处不出错最后都要执⾏finally中的语句⼀般⽤try...except就够⽤了顶多加上finallyfinally⼀般⽤来作为收尾⼯作 我们先来看个异常的例子 # 计算abdef cal(a, b):try:return a bexcept TypeError as v: # 捕获到TypeError异常时执行这段代码块的处理步骤print(输入正确的数字整数或者小数)cal(10, 胡辣汤)# 这个时候会执行自定义的处理方法 # 输入正确的数字整数或者小数 上面我们捕获到异常都是python自定义的异常TypeError和Except等在一些特定的场景中可能python内置的异常种类不能全部适用所以我们需要抛出自定义的异常。那么自定义的异常要怎么写⾃定义异常: 非常简单只要你的类继承了Exception类那你的类就是⼀个异常类就这么简单。 class MyException(Exception): # 类继承了Exception类这个类就是⼀个异常类了passdef cal(a, b):if ((type(a) int) or type(a) float) and ((type(b) int) or type(b) float):return a belse:raise MyException(输入正确的数字整数或者小数) # 当判断条件为假时我们手动抛出这个自定义异常try:cal(10, 胡辣汤) except MyException as m: # 然后这里捕获异常print(捕捉到自定义的异常) # 捕获到异常后执行具体的处理步骤except Exception as e: # Exception可以放在最后面可以捕获所有异常print(出错了) finally:print(计算完成) # 最后finally语句结尾# 执行结果 # 捕捉到自定义的异常 # 计算完成 这里再介绍一个知识点查看具体的错误信息当我们真正在调试的时候最好是能看到错误源⾃于哪⾥怎么办呢需要引入另⼀个模块traceback这个模块可以获到我们每个⽅法的调⽤信息⼜被成为堆栈信息这个信息对我们拍错是很有帮助的使用方法如下 import traceback def cal(a, b):try:return a bexcept TypeError as v:print(traceback.format_exc()) # 这里可以把错误的堆栈信息打印出来可以方便调试cal(10, 胡辣汤) 三、MD5加密 MD5消息摘要算法MD5 Message-Digest Algorithm是⼀种不可逆的加密算法它是可靠的并且安全的关于MD5加密这一块这里不多做介绍后面会另外写博客介绍加密/解密这一块的。在python中我们不需要⼿写这⼀套算法只需要引入⼀个叫hashlib的模块就能搞定MD5的加密⼯作 import hashlibobj hashlib.md5() # 返回一额hash对象 obj.update(alex.encode(utf-8)) # 加密的必须是字节 miwen obj.hexdigest() print(miwen) # 534b44a19bf18d20b71ecc4eb77c572f 这样加密一串字符真的安全吗我们在网上有很多在线解密MD5的工具这个这个字符串放到那些网站上一解密就出来了如下图 那么这是为什么呢这是因为MD5存在的历史悠久很多字符已经被加密记录到一个库中了这种所谓的解密就是再这个库中查找记录如果找到了就成为解密成功那我们应该怎么避免这种问题呢其实很简单我们在生成hash对象时加点盐salt就OK了 import hashlibobj hashlib.md5(bsjfqwjbekwjbckwo23o920fl2) obj.update(alex.encode(utf-8)) miwen obj.hexdigest() print(miwen) # 19c7d5410eda9452205f6b59e8ba2c33 # 这时候在拿去解密他就解密不了了 四、日志logging模块 logging模块的使用方法: 导入logging模块简单配置⼀下logging出现异常的时候(except). 向⽇志⾥写错误信息.logging模块的简单使用: # filename: ⽂件名 # format: 数据的格式化输出. 最终在⽇志⽂件中的样⼦ # 时间-名称-级别-模块: 错误信息 # datefmt: 时间的格式 # level: 错误的级别权重, 当错误的级别权重⼤于等于leval的时候才会写⼊⽂件 logging.basicConfig(filenamex1.txt,format%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s,datefmt%Y-%m-%d %H:%M:%S,level30) # 当前配置表示30以上的分数会被写⼊⽂件 # 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(我是警告) # 警告 30 logging.info(我是基本信息) # 20 logging.debug(我是调试) # 10 logging.log(2, 我是⾃定义) # ⾃定义. 看着给分 最后, 如果你系统中想要把⽇志⽂件分开比如⼀个⼤项⽬有两个⼦系统那两个⼦系统要分开记录⽇志⽅便调试那怎么办呢注意⽤上⾯的basicConfig是搞不定的我们要借助⽂件助⼿(FileHandler)来帮我们完成⽇志的分开记录这里如果要修改日志的文件编码格式也是在这里改的 import logging # 创建⼀个操作⽇志的对象logger依赖FileHandler file_handler logging.FileHandler(l1.log, a, encodingutf-8) file_handler.setFormatter(logging.Formatter(fmt%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s)) logger1 logging.Logger(s1, levellogging.ERROR) logger1.addHandler(file_handler) logger1.error(我是A系统)# 再创建⼀个操作⽇志的对象logger依赖FileHandler file_handler2 logging.FileHandler(l2.log, a, encodingutf-8) file_handler2.setFormatter(logging.Formatter(fmt%(asctime)s - %(name)s -%(levelname)s -%(module)s: %(message)s)) logger2 logging.Logger(s2, levellogging.ERROR) logger2.addHandler(file_handler2) logger2.error(我是B系统) 转载于:https://www.cnblogs.com/zpzhue1/p/9948631.html
http://www.huolong8.cn/news/230525/

相关文章:

  • 包头做网站的公司常见的网络营销平台有哪些
  • 怎么做hello官方网站wordpress使用腾讯云cos
  • 专业网站建设定制河南省建设监理网站
  • 谷歌做新媒体运营的网站wordpress移动端加底部导航
  • 如何用二级域名做网站布奏html in wordpress
  • 北京手机模板建站聊城的网站制作公司
  • 如何注册申请chn网站深圳关键词排名优化系统
  • 汉沽做网站大连商城网站建设
  • 上海网站设计成功柚v米科技淘宝客网站制作
  • 广东注册公司在哪个网站申请做电商网站的框架结构图
  • 做网站能赚钱吗表情包上海网站制作怎么选
  • 网站建设运营的灵魂是免费域名注册网站
  • icp备案网站信息修改自己如何做app
  • 上海建站网站简洁案例seo如何提高网站排名
  • 专做外贸库存的网站浙江王氏生态建设网站
  • asp个人网站模板集团门户网站建设不足
  • 在linux系统上用什么做网站全国各城市感染高峰进度查询
  • 网站建设公司知识手机端网站建站流程
  • 郴州网站设计较好的公司wordpress数据库文件
  • 建个网站有收网站流量平台
  • 重庆渝发建设有限公司官网惠州百度seo在哪
  • 做 理财网站营山县城乡规划建设局官方网站
  • 网站建设简单模板株洲网站seo优化价格
  • wordpress多站点site id温州网站系统开发
  • 怀化找工作网站不关站备案wordpress
  • 北京专业响应式网站建设做响应式网站的意义
  • 高端网站推广网站开发思路
  • 海门网站建设推一把网络营销学院
  • 徐州网站制作报价前端技术
  • 哪家做的濮阳网站建设wordpress翻译软件