zoukankan      html  css  js  c++  java
  • python

    Python用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,则程序就会用所谓的回溯(traceback)来终止执行。

    大多数错误会引发异常,但异常不一定代表错误,有时只是一个警告,有时只是一个终止信号,例如退出循环等

    常见异常处理语法如下:

    • try...  except....
    • try...  except...  else...
    • try...  except...  finally...
    • with语句
    • raise(主动抛出异常)
    • 常见异常

    下面分别介绍:

    1. try...  except....

     将可能出错的代码放在try中,将异常处理代码放在except中

    打开一个不存在的文件,捕获这个异常,打印出一行字
    1
    try: 2 f = open('nothing.txt', 'rt') 3 except FileNotFoundError: 4 print('异常了')

     所有的异常类,都继承自Exception类,Exception类继承自BaseException类(基类)。所有我们也可以用Exception或BaseException来接收所有类型的异常

    也可以使用基类捕获异常
    1
    try: 2 f = open('nothing.txt', 'rt') 3 except Exception: # 或BaseException 4 print('异常了')

    以上都是异常时打印文字,但如何准确知道是那一行代码出了问题,使用as msg

    打印详细的异常原因
    1
    try: 2 print(aa) 3 f = open('nothing.txt', 'rt') 4 except Exception as msg: # 定义msg变量,用于接收异常信息,并在下面通过print打印 5 print(msg) # 会打印:name 'aa' is not defined

    异常时,跳过,什么也不打印也不处理

    1 try:
    2     print(aa)
    3 except:
    4     pass

    2. try...  except...  else...

     没有异常时的代码,放在else中

    1 try:
    2     my_string = input('请输入几个字符')
    3 except EOFError:       # ctrl+d,会引发此异常
    4     print('输入被强制中断了')
    5 else:
    6     print('没有异常!这是你刚才输入的字符:', my_string)

    3. try...  except...  finally...

    不管是否出现异常,都会执行的代码,放在finally中

    例如:文件的关闭、锁的释放、把数据库的连接返还给连接池等操作 

    1 try:
    2     f = open('abc.txt', 'rt')     # 正常打开一个已存在的文件
    3     print(aa)
    4 except Exception as msg:
    5     print(msg)                    # 捕获异常,打印:name 'aa' is not defined
    6 finally:
    7     f.close()
    8     print('关闭文件')              # 不管是否有异常,都会执行,关闭文件,并打印:关闭文件

    4. with语句

    一般在try中获取资源,在finally中释放资源。另一个更简洁的语法是with语句

     传统的try...finally...:

    1 try:
    2     f = open('123.txt', 'rt')
    3     while True:
    4         content = f.readline()
    5         print(content, end=' ')
    6         if len(content) == 0:
    7             break
    8 finally:
    9     f.close()

    简洁的with:

    1 with open('123.txt') as f:  # 将关闭文件的操作由with open来完成
    2     for line in f:
    3         print(line, end=' ')

    5. raise(主动抛出异常)

     通过raise语句来抛出异常

     1 class ShortInputException(Exception):     # 1.定义异常类,继承自Exception
     2     def __init__(self, length, atleat):
     3         self.legth = length
     4         self.atleast = atleat
     5 
     6 try:
     7     text = input('请输入一些字符:')
     8     if len(text) < 3:
     9         raise ShortInputException(len(text), 3)    # 2.抛出异常
    10 except EOFError:
    11     print('被手动终止')
    12 except ShortInputException as ex:   # 3.接收异常
    13     print('expect at least {}, but your input is{}'.format(ex.atleast, ex.legth))# 4.使用异常对象的atleast和legth字段来打印错误信息

    6. 常见异常

    BaseException  新的所有异常类的基类
    Exception 所有异常类的基类,但继承自BaseException类
    AssertionError assert语句失败
    FileNotFoundError 试图打开一个不存在的文件或目录
    AttributeError 试图访问的对象没有属性
    OSError 系统错误,如磁盘已满等
    NameError 使用一个还未赋值的变量
    IndexError 当一个序列超出了范围
    SyntaxError 语法错误
    KeyboardInterrupt Ctrl+c
    TypeError 传入的对象类型与要求不符
  • 相关阅读:
    java读写文本文件
    django学习<二>:连接数据库
    【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
    【MongoDB】C#中的Mongo数据类型转换
    【MongoDB】 基于C#官方驱动2.2版的封装类
    【Python】 属性的 get 与 set 方法
    【基础知识】UML基础
    【C#】 知乎用户网络爬虫
    【C#】MVC项目中搭建WebSocket服务器
    【MongoDB】 Windows 安装
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/12343203.html
Copyright © 2011-2022 走看看