Python错误与异常 Python 第1张

 

前言

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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

作者:solo

Python错误与异常 Python 第2张

 

本次分享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')

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄