【python基础知识】异常处理:try-except、try-except-else-finally、与自定义异常

每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果未对异常进行处理,程序将停止并显示traceback,其中包含有关异常的报告。

一. 异常结构

1. try-except

ZeroDivisionError异常例子

if __name__ == '__main__':
    try:
        print(5 / 0)
    except ZeroDivisionError:
        print("You can't divide by zero!")

FileNotFoundError异常例子

filename = 'alice.txt'

try:
    with open(filename, encoding='utf-8') as f:
        contents = f.read()
except FileNotFoundError:
    print(f"Sorry, the file {filename} does not exist.")

 

2. try-except-else

通过将可能引发错误的代码放在try-except代码块中,可提高程序抵御错误的能力。依赖try代码块成功执行的代码都应放到else代码块中,如下:

if __name__ == '__main__':
    filename = 'alice1.txt'

    try:
        with open(filename, encoding='utf-8') as f:
            contents = f.read()
    except FileNotFoundError:
    # 这里并没有抛出异常
        print(f"Sorry, the file {filename} does not exist.")
    else:
    # 计算该文件大致包含多少个单词。
         words = contents.split()
         num_words = len(words)
         print(f"The file {filename} has about {num_words} words.")

 

3. try-except-else-finally

finally块用于回收在try块里打开的物理资源,不管有没有异常,finally中的代码块总被执行。

try:
    num = int(input("请输入整数:"))
    result = 8 / num
    print(result)
except ValueError:
    print("请输入正确的整数")
except ZeroDivisionError:
    print("除 0 错误")
except Exception as result:
    print("未知错误 %s" % result)
else:
    print("正常执行")
finally:
    print("执行完成,但是不保证正确")

 

4. raise主动抛出异常(throw new)

def functionName(level):
    if level < 1:
        # 执行到这一句就会抛出这个异常
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行
    print("异常后不会执行啦!")

functionName(0)

 

5. 静默失败

有时候你希望程序在发生异常时保持静默,就像什么都没有发生一样继续运行。

  def count_words(filename):
      """计算一个文件大致包含多少个单词。"""
      try:
          --snip--
      except FileNotFoundError:
          pass
      else:
          --snip--

  filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
  for filename in filenames:
      count_words(filename)

现在,出现FileNotFoundError异常时,将执行except代码块中的代码,但什么都不会发生。这种错误发生时,不会出现traceback,也没有任何输出。用户将看到存在的每个文件包含多少个单词,但没有任何迹象表明有一个文件未找到。

 

二. 自定义异常

自定义异常一般继承与Exception或BaseException。

class ShortInputException(Exception):
    def __init__(self, length, least_length):
        super().__init__()
        self.length = length
        self.least_length = least_length

    def __str__(self):
        return '您输入的长度为:{},最短长度为:{}'.format(self.length, self.least_length)


try:
    content = input('请输入内容:')
    if len(content) < 5:
        raise ShortInputException(len(content), 5)
    else:
        print('符合要求')
except ShortInputException as e:
    print(e)

 

相关推荐

  1. *Python中的异常处理try-except-else-finally详解

    2024-07-21 07:24:01       30 阅读
  2. 异常处理(try-catch-finally)

    2024-07-21 07:24:01       34 阅读
  3. python异常try/finally分句

    2024-07-21 07:24:01       43 阅读
  4. python异常try/else分句

    2024-07-21 07:24:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 07:24:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 07:24:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 07:24:01       45 阅读
  4. Python语言-面向对象

    2024-07-21 07:24:01       55 阅读

热门阅读

  1. U425647题解

    2024-07-21 07:24:01       15 阅读
  2. .NET在游戏开发中有哪些成功的案例?

    2024-07-21 07:24:01       15 阅读
  3. vue和react中都使用的hook到底是什么?

    2024-07-21 07:24:01       17 阅读
  4. 如何理解李彦宏说的“不要卷模型,要卷应用”

    2024-07-21 07:24:01       16 阅读
  5. Markdown 链接

    2024-07-21 07:24:01       14 阅读
  6. 【算法】浅析贪心算法

    2024-07-21 07:24:01       15 阅读
  7. LeetCode 71, 86, 117

    2024-07-21 07:24:01       18 阅读
  8. git how to fix conflict(git中解决冲突问题)

    2024-07-21 07:24:01       16 阅读
  9. 设计模式--观察者模式

    2024-07-21 07:24:01       17 阅读
  10. python与自动化运维相关的库有哪些?

    2024-07-21 07:24:01       13 阅读