zoukankan      html  css  js  c++  java
  • Python错误与异常

     

    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    作者:solo

     

    本次分享Python错误与异常,主要知识点如下:

    • 语法错误
    • 异常
    • 异常处理
    • 抛出异常
    • 自定义异常
    • 实例

    语法错误

    SyntaxError 类表示语法错误,当解释器发现代码无法通过语法检查时会触发的错误。语法错误是无法用 try...except...捕获的。

    >>> print:
      File "<stdin>", line 1
        print:
             ^
    SyntaxError: invalid syntax

    异常

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

    异常处理

    print(5/0)

    运行结果:

    Traceback (most recent call last):
      File "文件与异常/文件与异常.py", line 228, in <module>
        print(5/0)
    ZeroDivisionError: division by zero

    异常处理使用以下格式:

    try-except代码块
    try:
        print(5/0)
    except ZeroDivisionError:
        print("can't divide by zero")
    #结果
     print("can't divide by zero")
    抛出异常

    抛出异常

    使用 raise 语句抛出一个指定的异常。

    raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

    如果你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就可以再次把它抛出。

    自定义异常

    可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。

    当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类。

    大多数的异常的名字都以”Error”结尾,就跟标准的异常命名一样。

    实例

    import sys
    
    
    class Error(Exception):
        """Base class for exceptions in this module."""
        pass
    
    
    # 自定义异常
    class InputError(Error):
        """Exception raised for errors in the input.
    
        Attributes:
            expression -- input expression in which the error occurred
            message -- explanation of the error
        """
    
        def __init__(self, expression, message):
            self.expression = expression
            self.message = message
    
    
    try:
        print('code start running...')
    
        raise InputError('input()', 'input error')
    
        # ValueError
        int('a')
    
        # TypeError
        s = 1 + 'a'
    
        dit = {'name': 'john'}
        # KeyError
        print(dit['1'])
    except InputError as ex:
        print("InputError:", ex.message)
    except TypeError as ex:
        print('TypeError:', ex.args)
        pass
    except (KeyError, IndexError) as ex:
        """支持同时处理多个异常, 用括号放到元组里"""
        print(sys.exc_info())
    except:
        """捕获其他未指定的异常"""
        print("Unexpected error:", sys.exc_info()[0])
        # raise 用于抛出异常
        raise RuntimeError('RuntimeError')
    else:
        """当无任何异常时, 会执行 else 子句"""
        print('"else" 子句...')
    finally:
        """无论有无异常, 均会执行 finally"""
        print('finally, ending')
  • 相关阅读:
    Java异常的深层次理解
    Java笔记1_java基础
    oracle怎么实现id自增和设置主键
    C51最小系统
    文本输入方式的pspice仿真步骤
    外部中断实验
    客户端测试
    定时器实验
    linklist template
    dfs:10元素取5个元素的组合数
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13187185.html
Copyright © 2011-2022 走看看