首页 > 其他分享 >【JS逆向课件:第八课:异常处理】

【JS逆向课件:第八课:异常处理】

时间:2024-07-20 10:55:15浏览次数:13  
标签:try alist except 课件 JS 第八课 子句 print 异常

异常处理

  • 首先我们要理解什么叫做**"异常”**?

    • 在程序运行过程中,总会遇到各种各样的问题和错误。
    • 有些错误是我们编写代码时自己造成的:
      • 比如语法错误、调用错误,甚至逻辑错误。
    • 还有一些错误,则是不可预料的错误,但是完全有可能发生的:
      • 比如文件不存在、磁盘空间不足、网络堵塞、系统错误等等。
    • 这些导致程序在运行过程中出现异常中断和退出的错误,我们统称为异常。大多数的异常都不会被程序处理,而是以错误信息的形式展现出来。
    #0不能被作为除数
    1/0
    异常信息为:ZeroDivisionError: division by zero
    
  • 异常的分类:

    • 异常有很多种类型,Python内置了几十种常见的异常,无需特别导入,直接就可使用。
    • 需要注意的是,所有的异常都是异常类,首字母是大写的!
  • 异常的危害:

    • 如果程序中一旦出现了异常的语句代码,则该异常就会立即中断程序的运行!
  • 因此:

    • 为了保证程序的正常运行,提高程序健壮性和可用性。我们应当尽量考虑全面,将可能出现的异常进行处理,而不是留在那里,任由其发生。
  • python处理异常的机制:

    • Python内置了一套try…except…finally…的异常处理机制,来帮助我们进行异常处理。其基本语法是:

    • try:
          pass
      except Exception as ex:
          pass
      
    • 机制说明:

      • 首先,执行try子句(在关键字try和关键字except之间的语句)

      • 如果没有异常发生,忽略except子句,try子句执行后结束。

      • 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。

      • try:
            print("发生异常之前的语句正常执行")
            print(1/0)
            print("发生异常之后的语句不会被执行")
        except ZeroDivisionError as e:
            print(e)
        
    • 如果程序发生的异常不在你的捕获列表中,那么依然会抛出别的异常:

    • # 未捕获到异常,程序直接报错
      s1 = 'hello'
      try:
          int(s1)
      except IndexError as ex:    # 本例为非法值异常,而你只捕获索引异常
          print(ex)
      
  • Exception是什么?

    • 在Python的异常中,有一个通用异常:Exception,它可以捕获任意异常。
    • 思考:那么既然有这个什么都能管的异常,其他诸如OSError、ZeroDivisionError的异常是不是就可以不需要了?
      • 当然不是!很多时候程序只会弹出那么几个异常,没有必要针对所有的异常进行捕获,那样的效率会很低。另外,根据不同的异常种类,制定不同的处理措施,用于准确判断错误类型,存储错误日志,都是非常有必要甚至强制的。
    • 常见的异常类型:
    异常名解释
    AttributeError试图访问一个对象没有的属性
    IOError输入/输出异常
    ImportError无法引入模块或包;多是路径问题或名称错误
    IndentationError缩进错误
    IndexError下标索引错误
    KeyError试图访问不存在的键
    KeyboardInterruptCtrl+C被按下,键盘终止输入
    NameError使用未定义的变量
    SyntaxError语法错误
    TypeError传入对象的类型与要求的不符合
    UnboundLocalError试图访问一个还未被设置的局部变量
    ValueError传入一个调用者不期望的值,即使值的类型是正确的
    OSError操作系统执行错误
  • Python的异常机制具有嵌套处理的能力:

    • 比如在函数f3()调用f2(),f2()调用f1(),虽然是在f1()出错了,但只需要在f3()进行异常捕获,不需要每一层都捕获异常

    • #函数嵌套出现异常
      def f1():
          return 10/0
      
      def f2():
          f1()
      
      def f3():
          f2()
      
      f3()
      
    • 函数嵌套处理异常:

    • def f1():
          return 10/0
      
      def f2():
          f1()
      
      def f3():
          f2()
      
      try:
          f3()
      except Exception as e:
          print(e)
      
  • try…excetion的嵌套

    • 之前我们说过,不是只使用通用的异常类Exception就万事大吉了,为了效率问题,我们需要对常见的异常信息进行精准的捕获,那么如果异常出现在用户层的话,则就需要对用户操作可能会出现的异常进行判断然后精准捕获了,如何操作呢?

      • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。也就是前面说的嵌套处理能力。直到程序最顶端如果还没有被捕获,那么将弹出异常。

      • try:
            try:
                print("发生异常之前的语句正常执行")
                print(1/0)
                print("发生异常之后的语句不会被执行")
            except ValueError as e:
                print(e)
        
        except ZeroDivisionError as e:
            print("里层没有抓好,只能辛苦我外层了")
        
      • 或者使用一个try和多个except的形式:

      • try:
            print("发生异常之前的语句正常执行")
            print(1/0)
            print("发生异常之后的语句不会被执行")
        except NameError as e:
            print(e)
        except ZeroDivisionError as e:
            print("我是第一个抓取到除零异常的")
        except (ValueError,ZeroDivisionError) as e:
            print("我是备胎")
        
      • 或者在except后面跟一个元组,元组中包含多个异常类

    • except (RuntimeError, TypeError, NameError):
            pass
      
  • finally和else子句

    • try except语法还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行:

    • 同样的,还有一个可选的finally子句。无论try执行情况和except异常触发情况如何,finally子句都会被执行!

    • 当然,else和finally同时存在时:

    • try:
          pass
      except:
          pass
      else:
          print("else")
      finally:
          print("finally")
      

推导式

  • Python语言有一种独特的语法,相当于语法糖的存在,可以帮你在某些场合写出比较精简酷炫的代码。但没有它,也不会有太多的影响。Python语言有几种不同类型的推导式

    • 列表推导式
    • 字典推导式
    • 集合推导式
    • 元组推导式?
  • 列表推导式

    • 列表推导式是一种快速生成列表的方式。其形式是用方括号括起来的一段语句,如下例子所示:

    • alist = [x*2 for x in range(1,10)]
      print(alist)
      ############上下两组代码是等效
      alist = []
      for x in range(1,10):
          alist.append(x*2)
      print(alist)
      
  • 列表推导式要这么理解,首先执行for循环,对于遍历的每一个x,代入x*x表达式中进行运算,将运算结果逐一添加到一个新列表内,循环结束,得到最终列表。它相当于下面的代码:

  • alist = []
      for x in range(1,10):
        alist.append(x*2)
    print(alist)
    
    • 作用:

      • 列表推导式为我们提供了一种在一行内实现较为复杂逻辑的生成列表的方法。其核心语法是用中括号[]将生成逻辑封装起来。当然列表推导式也有多样用法
  • 增加条件语句

  • alist = [x * x for x in range(1,11) if x % 2 == 0]
    print(alist)
    
    ##############相当于如下代码
    alist_1 = []
    for x in range(1,11):
        if x % 2 == 0:
            alist_1.append(x*x)
    print(alist_1)
    
  • 多重循环

    • re = [a+b for a in '123' for b in 'abc']
      print(re)
      
      #############
      alist = []
      for a in '123':
          for b in 'abc':
              alist.append(a+b)
      print(alist)
      
  • 字典推导式

    • 既然使用中括号[]可以编写列表推导式,那么使用大括号呢?你猜对了!使用大括号{}可以制造字典推导式!

    • dic = {x:x**2 for x in [2,4,6]}
      print(dic)
      
      '''
      dic = {}
      for x in [2,4,6]:
          dic[x] = x**2
      '''
      
    • 注意x: x**2的写法,中间的冒号,表示左边的是key右边的是value。

  • 集合推导式

    • 大括号除了能用作字典推导式,还可以用作集合推导式,两者仅仅在细微处有差别。

    • a = {x for x in 'aabbccddeeff'}
      print(a)
      

标签:try,alist,except,课件,JS,第八课,子句,print,异常
From: https://blog.csdn.net/weixin_50556117/article/details/140564498

相关文章

  • 【JS逆向课件:第七课:模块与包】
    模块与包模块模块介绍在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。而这样的一......
  • 将Json格式的文件转为Excel格式文件的python代码
    importpandasaspdimportosfromopenpyxlimportWorkbook'''pandas是Python中用于数据分析的一个非常强大的库,它提供了快速、灵活和表达式丰富的数据结构,旨在使“关系”或“标签”数据的处理工作变得既简单又直观。pandas非常适合于处理表格数据,如CSV文件、SQL查询结......
  • node基础,nodejs核心API,nodejs核心理念、nodejs基础面试必备宝典
    Node.js基础篇1.认识Node.jsNode.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与PHP、Java、Python、.NET、Ruby等后端语言平起平坐。Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome......
  • js上传base64
    <!DOCTYPEhtml><html><head><title>UploadImage</title></head><body><inputtype="file"id="fileInput"><buttononclick="uploadImage()">UploadImage</button&g......
  • 前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!
    前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!首先聊下node.js的优缺点和应用场景Node.js的优点和应用场景Node.js作为后端开发的选择具有许多优点,以下是其中一些:高性能:Node.js采用了事件驱动、非阻塞I/O模型,使得它能够处理大量并发请求而不会阻塞线程,从而具有出色......
  • JSON解析平铺获取数据
    datax工程源码提供Configuration提供多级JSON配置信息无损存储importcom.alibaba.fastjson2.JSON;importcom.alibaba.fastjson2.JSONWriter;importcom.zditec.system.utils.exception.CommonErrorCode;importcom.zditec.system.utils.exception.DataXException;import......
  • 初学js Day01
    JavaScript的由来(js)1995年2月发布的,NetscapeNavigator2浏览器开发一种名为LiveScript的脚本语言。为了赶在发布日期前完成LiveScript的开发,Netscape与Sun公司建立了一个开发联盟,共同开发LiveScript。在NetScapeNavigator2发布前夕,网景为了更好地推广这个脚本语言......
  • 前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!
    首先聊下node.js的优缺点和应用场景Node.js的优点和应用场景Node.js作为后端开发的选择具有许多优点,以下是其中一些:高性能:Node.js采用了事件驱动、非阻塞I/O模型,使得它能够处理大量并发请求而不会阻塞线程,从而具有出色的性能表现。轻量级和高效:Node.js的设计简洁而轻量,......
  • 【2024】SpringBoot+Vue.js协同过滤算法美食推荐小程序
     博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大......
  • ThreeJS Shader的效果样例网格平面和网格球体(一)
    本文中效果主要采用ThreeJS 中的着色器(Shader)以及结合ShaderMaterial实现的。主要用到的内置方法有:step:是一个阶跃函数,它将一个浮点数与一个阈值进行比较,并返回一个阶跃值;比如step(edge,x), 如果x小于等于edge,则返回0.0, 如果x大于edge,则返回1.0。fract......