Python的逻辑控制语句

  • 条件判断语句

    • if
    • elif
    • else

      a = 50
      if a > 100:
          print("a 超过阈值")
      elif a == 50:
          print("a 只有阈值的一半")
      else:
          print("a 小于阈值")
  • 循环语句

    • for

      遍历一个可迭代对象(暂时理解为list), 会影响相同作用域当中的变量

      l = [1, 2, 3, 4, 5, 6]
      e = 0
      
      
      for e in l:
          print(e)
      
      print(f"final e value: {e}")
      • 获取索引值和值

        l = [1, 2, 3, 4, 5, 6]
        
        
        for i, e in enumerate(l):
            print(f"index: {i}, value: {e}")
    • while循环

      一定要有逻辑判断语句来退出while循环

      while 判断语句:
          表达式
      
      while True:
          判断语句
          表达式
    • 跳出循环

      • break

        停止当前循环

      • continue

        跳过当前的执行逻辑, 立即执行下一个循环语句单元;

      • pass

        跳过当前条件判断中的执行语句, 后续语句继续执行;

Python的异常与处理

  • 异常

    程序遇到严重错误时, 会终止程序的运行并抛出异常

    def my_sub(a, b):
        return a / b
    
    my_sub(1, 0)
  • 捕获异常

    try:
        表达式
    except [Exception] as e:
        表达式
    finnaly:
        表达式
    
    
    
    def my_sub(a, b):
        try:
            return a / b
        except ZeroDivisionError:
            # print(e)
            print("分母不可为0")
            return None
        finally:
            print("function my_sub end")
    
    my_sub(1, 0)
    • Exception

      所有异常的基类, 所有的异常都是Exception的子类

    • 处理异常颗粒度要细一点, 尽量不要捕获基类Exception, 尤其是数据处理的时候.
    • 常见的异常

      • IndexError

        索引值超过了列表长度

        >>> l = [1]
        >>> l[2]
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        IndexError: list index out of range
        
      • KeyError

        找不到Key

        >>> d = {"a": 1}
        >>> d["b"]
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        KeyError: 'b'
      • ValueError

        传入的参数错误

        >>> int('a1')
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        ValueError: invalid literal for int() with base 10: 'a1'
        
      • TypeError

        类型错误, 常见于运算

        >>> 1 + '2'
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: unsupported operand type(s) for +: 'int' and 'str'
        
      • SyntaxError

        语法报错, 检查自己的语法有没有写错

      • IndentationError

        缩进错误

        • 混用tab和space(空格)
        • 缩进长度不对
  • 如何处理异常

    • 处理
    • 抛出新异常

      def my_sub(a, b):
          try:
              return a / b
          except ZeroDivisionError:
              print("分母不可为0")
              raise Exception("params error")
          finally:
              print("function my_sub end")
    • 重新抛出

      def my_sub(a, b):
          try:
              return a / b
          except ZeroDivisionError:
              print("分母不可为0")
              raise ZeroDivisionError
          finally:
              print("function my_sub end")
    • 忽略(不推荐)

      pass

      用来指示当前处理语句没有正式写完, 尽量不要忽略异常, 否则代码的健壮度会很差, 造成不可预知的bug.

  • 自定义异常

    class ParamsError(Exception):
        pass
        
    def my_sub(a, b):
        try:
            return a / b
        except ZeroDivisionError:
            raise ParamsError("分母不可以为0")
        finally:
            print("function my_sub end")  
Last modification:September 2, 2022
如果觉得我的文章对你有用,请随意赞赏