python自定义异常,使用raise引发异常

1.自定义异常类,自定义的异常类必须是Exception或者Error的子类!

 1 #!/usr/bin/env python
 2 # encoding: utf-8
 3
 4 class IllegalException(Exception):
 5     ‘‘‘
 6     Custom exception types
 7     ‘‘‘
 8     def __init__(self, parameter, para_value):
 9         err = ‘The parameter "{0}" is not legal:{1}‘.format(parameter, para_value)
10         Exception.__init__(self, err)
11         self.parameter = parameter
12         self.para_value = para_value

2.try中使用raise语句来引发一个异常,其中check_positive_int(para_list)函数是用来检查输入的list是否为正整数。

 1 def check_positive_int(para_list):
 2         ‘‘‘
 3         @summary: check whether the parameter is positive integer
 4         @param: para_list: a list,para_list: a list,[{‘key‘:‘para1‘,‘value‘:para1},{‘key‘:‘para2‘,‘value‘:para2}]
 5         ‘‘‘
 6         for item in para_list:
 7             if not (item[‘value‘] > 0 and isinstance(item[‘value‘], int)):
 8                 return item[‘key‘], ‘{0} is not a positive integer‘.format(str(item[‘value‘]))
 9         return True
10
11
12 try:
13     integer = check_positive_int([{‘key‘:‘para1‘, ‘value‘:1}, {‘key‘:‘para2‘, ‘value‘:-2}])
14     if integer != True:
15         raise(IllegalException(integer[0], integer[1]))
16 except IllegalException, x:
17     print ‘x--->‘, x
18     print ‘x.parameter--->‘, x.parameter
19     print ‘x.para_value--->‘, x.para_value
20 else:
21     print ‘NO ERROR‘

3.执行try,由于我们要校验的list[{‘key‘:‘para1‘, ‘value‘:1}, {‘key‘:‘para2‘, ‘value‘:-2}]中有负数值,所以raise我们自定义的异常。

输出结果为:

1 x---> The parameter "para2" is not legal:-2 is not a positive integer
2 x.parameter---> para2
3 x.para_value---> -2 is not a positive integer
时间: 2024-10-10 03:51:09

python自定义异常,使用raise引发异常的相关文章

python——异常except语句用法与引发异常

except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,<数据>:捕获指定异常及其附加的数据 except:<异常名1,异常名2>:<数据>:捕获异常名1或者异常名2,及附加的数据库 常用异常名: 异常名    描述 AttributeError 调用不存在的方法引发的异常 EOFError     遇到文件末尾引发的异常 Impor

python学习(八) 异常

8.1 什么是异常 8.2 按自己的方式出错 如何引发异常,以及创建自己的异常类型. 8.2.1 raise语句 >>> raise Exception Traceback (most recent call last): File "<pyshell#130>", line 1, in <module> raise Exception Exception Exception:    所有异常的基类. AttributeError:属性引用或赋

A Byte of Python 笔记(11)异常:try..except、try..finally

第13章 异常 当你的程序中出现某些 异常的 状况的时候,异常就发生了. 错误 假如我们把 print 误拼为 Print,注意大写,这样 Python 会 引发 一个语法错误. 有一个SyntaxError被引发,并且检测到的错误位置也被打印了出来.这是这个错误的错误处理器 所做的工作. try..except 我们尝试读取用户的一段输入.按Ctrl-z(Linux 用户按 Ctrl-d),看一下会发生什么. Python引发了一个称为EOFError的错误,这个错误基本上意味着它发现一个不期

Python isinstance函数 raise

今天看了下廖雪峰的网站,发现有个isinstance函数可以对参数类型进行判断: 对参数类型做检查,只允许整数和浮点数类型的参数.数据类型检查可以用内置函数isinstance实现: def my_abs(x):     if not isinstance(x, (int, float)):         raise TypeError('bad operand type')     if x >= 0:         return x     else:         return -x

python基础教程总结7——异常

1.Python异常类 Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有: 异常 描述 NameError 尝试访问一个没有申明的变量 ZeroDivisionError 除数为0 SyntaxError 语法错误 IndexError 索引超出序列范围 KeyError 请求一个不存在的字典关键字 IOError 输入输出错误(比如你要读的文件不存在) AttributeError 尝试访问未知的对象属性 ValueError 传给函数的参数类型不正确,比如给in

“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常。

“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常. 被这个问题困扰了好长时间,终于找到了原因: 原来是本机安装的Oracle客户端版本与服务器不一致. 解决办法: 将以下的dll文件引用即可,dll分为两个版本,Windows7 32位系统亲测,不管安不安装Oracle客户端,都可以使用. 版本一:http://download.csdn.net/detail/zhzhx0318/9120651 版本二:http://downloa

System.Data.Entity.Internal.AppConfig 类型初始值设定项引发异常

在一开始时将connectionStrings 写在了configSections之上如下图一示,结果抛出:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常. 图一:最初配置 图二:抛出异常 解决方法,是将connectionStrings 写在了configSections之下,如图三 图三:调整后的配置

&lt;转&gt;类型初始值设定项引发异常

类型初始值设定项引发异常 连续两天都为这个运行时错误“类型初始值设定项引发异常”而烦恼,调试也不知道哪里出 了问题.上网Google一下,一大堆相同的问题,可是按照那些方法折腾来折腾去,问题还是一样.最后在CSDN上发帖子问了,果然“重赏之下必有勇 夫”,很快就有高手回复了,问题也随着解决了.哈哈.在此写个随笔,以后如果大家遇到类似问题,也可参考一下,自己也做个备忘,不然放在电脑上,又找不 到,我的电脑文件到处乱放,有时连我自己都找不到^_^. 问题是这样嘀: 项目采用了三层架构和工厂模式,并借

“system.servicemodel.diagnostics.traceutility” 类型初始值设定项引发异常

在调试WCF服务时遇到“system.servicemodel.diagnostics.traceutility” 类型初始值设定项引发异常错误,仔细检查后发现是配置文件问题. ... <startup> <supportedRuntime version = "v4.0" sku =".NETFramework, Version = v4.0"/> </startup> ... 可能是因为引用服务导致NET版本不兼容.去掉这一句