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')
  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13187185.html
Copyright © 2011-2022 走看看