Python异常继承关系和自定义异常实现代码实例

这篇文章主要介绍了Python异常继承关系和自定义异常实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

主要介绍 python 中异常的继承关系,及如何自定义异常

1. 异常的继承关系

BaseException  # 所有异常的基类
 +-- SystemExit  # 解释器请求退出
 +-- KeyboardInterrupt   用户中断执行(通常是输入^C)
 +-- GeneratorExit  # 生成器(generator)发生异常来通知退出
 +-- Exception  # 常规异常的基类
   +-- StopIteration  # 迭代器没有更多的值
   +-- StandardError  # 标准错误
   |  +-- BufferError
   |  +-- ArithmeticError
   |  |  +-- FloatingPointError
   |  |  +-- OverflowError
   |  |  +-- ZeroDivisionError
   |  +-- AssertionError
   |  +-- AttributeError
   |  +-- EnvironmentError
   |  |  +-- IOError
   |  |  +-- OSError
   |  |     +-- WindowsError (Windows)
   |  |     +-- VMSError (VMS)
   |  +-- EOFError
   |  +-- ImportError
   |  +-- LookupError
   |  |  +-- IndexError
   |  |  +-- KeyError
   |  +-- MemoryError
   |  +-- NameError
   |  |  +-- UnboundLocalError
   |  +-- ReferenceError
   |  +-- RuntimeError
   |  |  +-- NotImplementedError
   |  +-- SyntaxError
   |  |  +-- IndentationError
   |  |     +-- TabError
   |  +-- SystemError
   |  +-- TypeError
   |  +-- ValueError
   |     +-- UnicodeError
   |       +-- UnicodeDecodeError
   |       +-- UnicodeEncodeError
   |       +-- UnicodeTranslateError
   +-- Warning
      +-- DeprecationWarning
      +-- PendingDeprecationWarning
      +-- RuntimeWarning
      +-- SyntaxWarning
      +-- UserWarning
      +-- FutureWarnin
      +-- ImportWarnin
      +-- UnicodeWarnin
      +-- BytesWarning

2. 自定义异常

#自定义异常 需要继承Exception
class MyException(Exception):

  def __init__(self, *args):
    self.args = args

if __name__ == '__main__':
  try:
    raise MyException("自定义异常")
  except MyException as e:
    print e

3. 异常捕获

# 示例
str1 = 'abc'
try:
  int(str1)
except IndexError as e:
  print e
except KeyError as e:
  print e
except ValueError as e:
  print e
else:
  print 'try内正常处理'
finally:
  print '无论异常与否,都会执行我'

4. 主动触发异常

# raise xxx
def test_zero(num):
  try:
    if num == 0:
      raise ValueError('参数错误')
    return num
  except Exception as e:
    print e

test_zero(0)

5. 采用traceback模块查看异常

异常发生时,Python 能“记住”引发的异常以及程序的当前状态。

Python 维护着traceback(跟踪)对象,其中含有异常发生时与函数调用堆栈有关的信息。

异常可能在一系列嵌套较深的函数调用中引发。

程序调用每个函数时,Python 会在“函数调用堆栈”的起始处插入函数名。一旦异常被引发,Python 会搜索一个相应的异常处理程序。如果当前函数中没有异常处理程序,当前函数会终止执行,Python 会搜索当前函数的调用函数,并以此类推,直到发现匹配的异常处理程序,或者Python 抵达主程序为止。这一查找合适的异常处理程序的过程称为“堆栈辗转开解”(StackUnwinding)。

解释器一方面维护着与放置堆栈中的函数有关的信息,另一方面也维护着与已从堆栈中“辗转开解”的函数有关的信息。

#示例
def div(num1, num2):
  try:
    result = num1/num2
    return result
  except Exception as e:
    traceback.print_exc()

print div(1, 0)
#执行结果
Traceback (most recent call last):
None
 File "F:/Technology-20161005/python/python_project/demo/exceptiondemo/exceptiondemo.py", line 17, in div
  result = num1/num2
ZeroDivisionError: integer division or modulo by zero
# 可以将异常信息写到文件中
traceback.print_exc(file=open('1.txt','w+'))
(0)

相关推荐

  • python打印异常信息的两种实现方式

    1. 直接打印错误 try: # your code except KeyboardInterrupt: print("quit") except Exception as ex: print("出现如下异常%s"%ex) 如下例子 try: 2/0 except Exception as e: print(e) 结果为:division by zero 2. 用traceback模块打印 上述结果看不到具体错误的信息,如行数啥的,不方便调试的时候定位,因此也可以用

  • Python异常模块traceback用法实例分析

    本文实例讲述了Python异常模块traceback用法.分享给大家供大家参考,具体如下: traceback模块被用来跟踪异常返回信息. 如下例所示: import traceback try: raise SyntaxError, "traceback test" except: traceback.print_exc() 将会在控制台输出类似结果: Traceback (most recent call last):   File "H:PythonWorkSpaceT

  • python实现数据清洗(缺失值与异常值处理)

    1. 将本地sql文件写入mysql数据库 本文写入的是python数据库的taob表 source [本地文件] 其中总数据为9616行,列分别为title,link,price,comment 2.使用python链接并读取数据 查看数据概括 #-*- coding:utf-8 -*- #author:M10 import numpy as np import pandas as pd import matplotlib.pylab as plt import mysql.connector

  • python try except返回异常的信息字符串代码实例

    问题 https://docs.python.org/3/tutorial/errors.html#handling-exceptions https://docs.python.org/3/library/exceptions.html#ValueError try: int("x") except Exception as e: '''异常的父类,可以捕获所有的异常''' print(e) # e变量是Exception类型的实例,支持__str__()方法,可以直接打印. inv

  • Python Django中间件,中间件函数,全局异常处理操作示例

    本文实例讲述了Python Django中间件,中间件函数,全局异常处理操作.分享给大家供大家参考,具体如下: 应用名/middleware.py(定义中间件类,中间件函数.文件名可以任意): from django.http import HttpResponse # 定义中间件类. (类名可以任意,但类中的方法名是固定的) class TestMiddleware(object): '''中间件类''' def __init__(self): '''服务器重启之后,接收第一个请求时调用(只会

  • python实现异常信息堆栈输出到日志文件

    将try except中捕获到的异常信息输出到日志文件中,方便查找错误原因,tranceback模块提供了把详细出错堆栈信息格式化成字符串返回函数format_exc(). 具体代码如下 import traceback import logging logging.basicConfig(filename='log.log') def error_func(): b = 1 / 0 if __name__ == '__main__': try: error_func() except: s =

  • Python 异常的捕获、异常的传递与主动抛出异常操作示例

    本文实例讲述了Python 异常的捕获.异常的传递与主动抛出异常操作.分享给大家供大家参考,具体如下: 异常的捕获 demo.py(异常的捕获): try: # 提示用户输入一个整数 num = int(input("输入一个整数:")) # 使用 8 除以用户输入的整数并且输出 result = 8 / num print(result) except ValueError: print("请输入正确的整数") except Exception as result

  • python自动化测试之异常及日志操作实例分析

    本文实例讲述了python自动化测试之异常及日志操作.分享给大家供大家参考,具体如下: 为了保持自动化测试用例的健壮性,异常的捕获及处理,日志的记录对掌握自动化测试执行情况尤为重要,这里便详细的介绍下在自动化测试中使用到的异常及日志,并介绍其详细的用法. 一.日志 打印日志是很多程序的重要需求,良好的日志输出可以帮我们更方便的检测程序运行状态.Python标准库提供了logging模块,切记Logger从来不直接实例化,其好处不言而喻,接下来慢慢讲解Logging模块提供了两种记录日志的方式.

  • Python异常继承关系和自定义异常实现代码实例

    这篇文章主要介绍了Python异常继承关系和自定义异常实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要介绍 python 中异常的继承关系,及如何自定义异常 1. 异常的继承关系 BaseException # 所有异常的基类 +-- SystemExit # 解释器请求退出 +-- KeyboardInterrupt 用户中断执行(通常是输入^C) +-- GeneratorExit # 生成器(generator)发生异常来

  • python爬虫 批量下载zabbix文档代码实例

    这篇文章主要介绍了python爬虫 批量下载zabbix文档代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: UTF-8 -*- import requests,re,time url = 'https://www.zabbix.com/documentation/3.4/zh/manual' base_url = 'https://www.zabbix.com/documentation/3.4/' seco

  • Python检查 云备份进程是否正常运行代码实例

    这篇文章主要介绍了Python检查 云备份进程是否正常运行代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 场景:服务器自动备份数据库文件,每两小时生成一个新备份文件,通过云备份客户端自动上传,需要每天检查是否备份成功. 实现:本脚本实现检查文件是否备份成功,进程是否正常运行,并且发送相关邮件提醒. #! /usr/bin/env python import os import time import smtplib from email

  • Python计算两个矩形重合面积代码实例

    这篇文章主要介绍了Python 实现两个矩形重合面积代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 计算两个矩形的重合面积 import math x1, y1, x2, y2 = input().split(" ") x1, y1, x2, y2=int(x1), int(y1), int(x2), int(y2) # print(x1, y1, x2, y2) x1,x2 = min(x1,x2),max(x1,

  • 使用python脚本自动创建pip.ini配置文件代码实例

    这篇文章主要介绍了使用python脚本自动创建pip.ini配置文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 运行一下python代码自动创建pip/pip.ini文件并添加pip源 """ python建立pip.ini.py 2016年4月30日 03:35:11 codegay """ import os ini="""[global] inde

  • python基于gevent实现并发下载器代码实例

    这篇文章主要介绍了python基于gevent实现并发下载器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 并发下载原理 import gevent from gevent import monkey import urllib.request monkey.patch_all() def my_download(url): print('GET: %s' % url) resp = urllib.request.urlopen(url

  • python调用接口的4种方式代码实例

    这篇文章主要介绍了python调用接口的4种方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python中调用API的几种方式: - urllib2 - httplib2 - pycurl - requests 1.urllib2 import urllib2, urllib github_url = 'https://api.github.com/user/repos' password_manager = urllib2.HTT

  • python读取ini配置的类封装代码实例

    这篇文章主要介绍了python读取ini配置的类封装代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 此为基础封装,未考虑过多异常处理 类 # coding:utf-8 import configparser import os class IniCfg(): def __init__(self): self.conf = configparser.ConfigParser() self.cfgpath = '' def checkSec

  • python各层级目录下import方法代码实例

    这篇文章主要介绍了python各层级目录下import方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 以前经常使用python2.现在很多东西都切换到了python3,发现很多东西还是存在一些差异化的.跨目录import是常用的一种方法,并且有不同的表现形式,新手很容易搞混.有必要这里做个总结,给大家科普一下: 1 同级目录下的调用: 同级目录下的调用比较简单,一般使用场景是不同类的相互调用.不用考虑路径问题,常用的格式是:from

  • Python爬虫爬取百度搜索内容代码实例

    这篇文章主要介绍了Python爬虫爬取百度搜索内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 搜索引擎用的很频繁,现在利用Python爬虫提取百度搜索内容,同时再进一步提取内容分析就可以简便搜索过程.详细案例如下: 代码如下 # coding=utf8 import urllib2 import string import urllib import re import random #设置多个user_agents,防止百度限制I

随机推荐