老铁们,问一下,为什么我的华为nova3p9只要是电量

Python 中的异常处理与种类_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Python 中的异常处理与种类
来源:Linux社区&
作者:zhangjiansheng
异常处理是Python工程中补课避免的,进行异常处理,可以帮我们调试代码,使代码找起问题更加简单,更加容易哦。
一般都是利用Try,比较简单,代码也不复杂。
print 'try...'
r = 10 / 0
print 'result:', r
except ZeroDivisionError, e:
print 'except:', e
print 'finally...'
print 'END'
使用try...except捕获错误有一个巨大的好处,就是可以跨越多层调用,比如函数main()调用foo(),foo()调用bar(),结果bar()出错了,这时,只要main()捕获到了,就可以处理:
def foo(s):
return 10 / int(s)
def bar(s):
return foo(s) * 2
def main():
except StandardError, e:
print 'Error!'
print 'finally...'
&也就是说,不需要在每个可能出错的地方去捕获错误,只要在合适的层次去捕获错误就可以了。这样一来,就大大减少了写try...except...finally的麻烦。
异常应该是类对象。模块中定义了例外&exceptions。此模块不需要显式导入:异常在内置命名空间以及&exceptions模块中提供。
对于类异常,在try同一个声明中except&说提到的一类特殊条款,该条款还处理来自类(从中但也不例外类派生的任何异常类它派生)。通过子类化不相关的两个异常类永远不是等效的,即使它们具有相同的名称。
下面列出的内置异常可以由解释器或内置函数生成。除了提及的地方,他们有一个&关联值&,指示错误的详细原因。这可能是包含几个信息项的字符串或元组(例如,错误代码和解释代码的字符串)。关联值是语句的第二个参数&raise。如果异常类是从标准根类派生的BaseException,则相关联的值将作为异常实例的args属性存在。
用户代码可以引发内置异常。这可以用于测试异常处理程序或报告错误条件&就像&解释器引发相同异常的情况;&但请注意,没有任何可以防止用户代码提出不正确的错误。
内置的异常类可以被子类化以定义新的异常;&鼓励程序员从Exception&类或其子类之一导出新的异常,而不是从BaseException。有关定义异常的更多信息,请参见Python教程中&用户定义的异常。
以下异常仅用作其他异常的基类。
异常BaseException
所有内置异常的基类。它不是直接由用户定义的类继承(为此使用Exception)。如果&str()或者unicode()是在这个类的一个实例上被调用,返回实例的参数表示,或者当没有参数时,返回空字符串。
给异常构造函数的元组元组。一些内置异常(如IOError)期望一定数量的参数,并为此元组的元素分配特殊含义,而其他异常通常仅使用单个字符串给出错误消息。
异常Exception
所有内置的,非系统退出的异常都是从这个类派生出来的。所有用户定义的异常也应该从此类派生。
更改版本2.5:更改为继承BaseException。
异常StandardError
该基类除了所有内置例外StopIteration,&GeneratorExit,KeyboardInterrupt和SystemExit。&StandardError本身源于Exception。
异常ArithmeticError
对于那些内置异常的基类时引发的各种算术错误:OverflowError,ZeroDivisionError,&FloatingPointError。
异常BufferError
当无法执行缓冲区相关操作时引发。
异常LookupError
当映射或序列上使用的键或索引无效时引发异常的基类:IndexError,KeyError。这可以直接提出来codecs.lookup()。
异常EnvironmentError
对于可以在Python的系统外发生异常的基类:&IOError,OSError。当使用2元组创建此类型的异常时,第一个项目在实例的errno属性上可用(假设为错误号),第二个项目在属性上&strerror可用(通常是关联的错误消息)。元组本身也可以在属性上使用args。
新版本1.5.2。
当使用EnvironmentError3元组实例化异常时,前两个项目如上所述,而第三个项目在该filename属性上&可用。但是,为了向后兼容,该&args属性仅包含前两个构造函数参数的2元组。
该filename属性是None使用3个参数以外的其他异常创建的。的errno和strerror属性也None当实例与其他大于2个或3个参数创建。在最后一种情况下,args将逐个构造函数的参数包含为元组。
以下异常是实际引发的异常。
异常AssertionError
当assert声明失败时提起。
异常AttributeError
属性引用(请参阅属性引用)或赋值失败时引发。(当一个对象根本不支持属性引用或属性赋值时,TypeError会被提出。)
异常EOFError
当其中一个内置函数(input()或raw_input())在没有读取任何数据的情况下触发文件结束条件(EOF)时引发。(注:在&file.read()和file.readline()方法时,他们打EOF返回一个空字符串。)
异常FloatingPointError
当浮点操作失败时触发。这个异常总是定义的,但是只有当Python配置了该--with-fpectl选项,或者WANT_SIGFPE_HANDLER在pyconfig.h文件中定义了符号时,才能引发此异常&。
异常GeneratorExit
当发电机的close()方法被调用时提起。它直接继承BaseException而不是,StandardError&因为它在技术上不是错误。
在版本2.6中更改:更改为继承BaseException。
异常IOError
当I / O操作(如print语句,内置&open()函数或文件对象的方法)因I / O相关原因(例如&未找到文件&或&磁盘已满&)而失败时引发。
此类衍生EnvironmentError。有关异常实例属性的更多信息,请参阅上面的讨论。
在版本2.6中更改:更改socket.error为使用此作为基类。
异常ImportError
当import语句找不到模块定义或找不到要导入的名称时引发。from&...&import
异常IndexError
当序列下标超出范围时提起。(Slice索引被静默地截断以落在允许的范围内;如果索引不是一个纯整数,&TypeError则会被提升。)
异常KeyError
当在现有密钥集中找不到映射(字典)键时引发。
异常KeyboardInterrupt
当用户点击中断键(正常Control-C或&Delete)时触发。在执行期间,定期检查中断。当内置函数input()或raw_input()正在等待输入时,键入的中断也会引发此异常。异常继承&BaseException而不被意外地捕获&Exception并因此阻止解释器退出的代码。
更改版本2.5:更改为继承BaseException。
异常MemoryError
当操作内存不足时提起,但情况可能仍然会被抢救(通过删除某些对象)。相关联的值是一个字符串,指示什么样的(内部)操作用完了内存。请注意,由于底层内存管理架构(C的malloc()功能),解释器可能并不总是能够从这种情况中完全恢复;&但是它引发了一个异常,以便可以打印堆栈跟踪,以防万一出现程序的原因。
异常NameError
当找不到本地或全球名称时提起。这仅适用于不合格的名称。相关联的值是一个错误消息,其中包含无法找到的名称。
异常NotImplementedError
这个异常来源于RuntimeError。在用户定义的基类中,当需要派生类来覆盖该方法时,抽象方法应引发此异常。
异常OSError
这个异常来源于EnvironmentError。当函数返回与系统相关的错误(不是非法参数类型或其他偶然错误)时引发。的errno属性是从一个数字错误代码errno,并且strerror属性是相应的字符串,如将被C函数被打印perror()。请参阅模块errno,其中包含由底层操作系统定义的错误代码的名称。
对于涉及文件系统路径(例如chdir()或&unlink())的异常,异常实例将包含第三个属性&filename,即传递给该函数的文件名。
新版本1.5.2。
异常OverflowError
当算术运算的结果太大而不能被表示时提升。对于长整型(这不会&MemoryError放弃)而且对于大多数具有纯整数的操作,这不会返回长整数。由于在C中缺少浮点异常处理的标准化,大多数浮点运算也没有被检查。
异常ReferenceError
当由weakref.proxy()函数创建的弱引用代理&在垃圾回收之后用于访问指称对象的属性时,会引发此异常。有关弱引用的更多信息,请参阅该weakref模块。
2.2版中的新功能:以前被称为weakref.ReferenceError异常。
当检测到不属于任何其他类别的错误时引发。相关联的值是一个字符串,表示正确的错误。
异常StopIteration
由迭代器的next()方法引发,表明没有其他值。这是从而Exception不是StandardError,因为这不被认为是其正常应用程序中的错误。
版本2.2中新增。
异常SyntaxError
解析器遇到语法错误时引发。这可能发生在&import语句,exec语句,调用内置函数eval()或input()读取初始脚本或标准输入(也可交互式)时。
这个类的实例有属性filename,lineno,&offset并且text为的细节更容易获得。&str()&的异常实例仅返回消息。
异常IndentationError
与错误缩进相关的语法错误的基类。这是一个子类SyntaxError。
异常TabError
缩进时引发的标签和空格不一致。这是一个子类IndentationError。
异常SystemError
当翻译发现内部错误时,提出了这种情况,但情况并不那么严重,导致它放弃了所有的希望。相关联的值是一个字符串,表示出现错误(低级别)。
您应该向Python解释器的作者或维护者报告。确保报告Python解释器的版本(sys.version它也是在交互式Python会话开始时打印的),确切的错误消息(异常关联值)以及触发错误的程序源可能的可能。
异常SystemExit
该异常由sys.exit()函数引发。当它不被处理时,Python解释器退出;&不打印堆栈追溯。如果关联值为纯整数,则指定系统退出状态(传递给C的exit()函数);&如果是None,退出状态为零;&如果有其他类型(如字符串),则打印对象的值,退出状态为一。
实例具有code设置为建议的退出状态或错误消息(默认为None)的属性。此外,这种异常直接来自于BaseException而不是StandardError,因为它在技术上不是错误。
调用sys.exit()被转换为异常,以便清理处理程序(finally语句的try子句)可以被执行,并且调试器可以执行脚本而不会失去控制的风险。os._exit()如果绝对有必要立即退出(例如,在调用后的子进程os.fork())中,则可以使用该函数。
唯一的例外来自继承BaseException,而不是StandardError&或Exception使得它不会意外地被映入代码捕获&Exception。这允许异常正常传播并导致解释器退出。
更改版本2.5:更改为继承BaseException。
异常TypeError
当操作或功能应用于不适当类型的对象时提起。关联值是一个字符串,提供有关类型不匹配的详细信息。
异常UnboundLocalError
当引用函数或方法中的局部变量时引用,但没有值绑定到该变量。这是一个子类&NameError。
异常UnicodeError
当与Unicode相关的编码或解码错误发生时引发。它是一个子类ValueError。
UnicodeError具有描述编码或解码错误的属性。例如,err.object[err.start:err.end]给出编解码器失败的特定无效输入。
引起错误的编码的名称。
描述特定编解码器错误的字符串。
编解码器正在尝试编码或解码的对象。
第一个无效数据索引object。
上次无效数据后的索引object。
异常UnicodeEncodeError
在编码期间发生Unicode相关错误时引发。它是一个子类&UnicodeError。
异常UnicodeDecodeError
在解码过程中发生Unicode相关错误时引发。它是一个子类&UnicodeError。
异常UnicodeTranslateError
在翻译期间发生Unicode相关错误时引发。它是一个子类UnicodeError。
异常ValueError
当内置操作或函数接收到具有正确类型但不正确值的参数时引发,并且情况未被更精确的异常描述,例如IndexError。
异常VMSError
仅适用于VMS。发生VMS特定错误时引发。
异常WindowsError
当出现特定于Windows的错误或错误号不对应于某个errno值时引发。该winerror和&strerror值是从的返回值创建&GetLastError()并FormatMessage()从Windows平台的API函数。该errno值将值映射winerror到相应的errno.h值。这是一个子类OSError。
版本2.5更改:以前的版本将GetLastError()代码放入errno。
异常ZeroDivisionError
当分割或模运算的第二个参数为零时提升。关联值是指示操作数的类型和操作的字符串。
以下例外被用作警告类别;&warnings&有关详细信息,请参阅该模块。
异常Warning
警告类别的基类。
异常UserWarning
由用户代码生成的警告的基类。
异常DeprecationWarning
关于已弃用功能的警告的基类。
异常PendingDeprecationWarning
关于将来不推荐使用的功能的警告的基类。
异常SyntaxWarning
关于可疑语法的警告的基类。
关于可疑运行时行为的警告的基类。
异常FutureWarning
关于将来会在语义上改变的结构的警告的基类。
异常ImportWarning
关于模块进口中可能出现的错误的警告的基础类。
异常UnicodeWarning
与Unicode有关的警告的基类。
内置异常的类层次结构为:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- 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
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
零基础如何入门Python
Python正则表达式深入理解&
Python中正则表达式(re模块)的使用&
14.04下Python数据处理环境搭建&
Python Paramiko模块安装和使用&
《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码]
在 6.5上安装Python2.7&
Ubuntu 14.04 LTS下编译安装Open Babel和Python语言绑定
本文永久更新链接地址:
相关资讯 & & &
& (02/24/:16)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款> 博客详情
本文重在Java中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这篇文章迅速回忆起来。 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。 1.3 异常处理的流程 1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象 1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码 2 异常的分类 2.1 异常的分类 2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。 2.1.2 Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 2.2 每个类型的异常的特点 2.2.1 Error体系 Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。 2.2.2 Exception体系 Exception体系包括RuntimeException体系和其他非RuntimeException的体系 2.2.2.1 RuntimeException RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。 2.2.2.2 其他(IOException等等)这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。 2.3 与C++异常分类的不同 2.3.1 其实,Java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的。(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。 2.3.2 C++中logic_error与Java中的RuntimeException是等价的,而runtime_error与Java中非RuntimeException类型的异常是等价的。 3 异常的使用方法 3.1 声明方法抛出异常 3.1.1 语法:throws(略) 3.1.2 为什么要声明方法抛出异常?方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。 3.1.3 为什么抛出的异常一定是已检查异常? RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。 3.1.4 注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。 3.2 如何抛出异常 3.2.1 语法:throw(略) 3.2.2 抛出什么异常?对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。 3.2.3 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。 3.2.4 创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。需要注意的是,唯一有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。 3.3 捕获异常如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用户界面处理循环中。 3.3.1 语法:try、catch和finally(略)控制器模块必须紧接在try块后面。若掷出一个异常,异常控制机制会搜寻参数与异常类型相符的第一个控制器随后它会进入那个catch 从句,并认为异常已得到控制。一旦catch 从句结束对控制器的搜索也会停止。 3.3.1.1 捕获多个异常(注意语法与捕获的顺序)(略) 3.3.1.2 finally的用法与异常处理流程(略) 3.3.2 异常处理做什么?对于Java来说,由于有了垃圾收集,所以异常处理并不需要回收内存。但是依然有一些资源需要程序员来收集,比如文件、网络连接和图片等资源。 3.3.3 应该声明方法抛出异常还是在方法中捕获异常?原则:捕捉并处理哪些知道如何处理的异常,而传递哪些不知道如何处理的异常 3.3.4 再次抛出异常 3.3.4.1 为什么要再次抛出异常?在本级中,只能处理一部分内容,有些处理需要在更高一级的环境中完成,所以应该再次抛出异常。这样可以使每级的异常处理器处理它能够处理的异常。 3.3.4.2 异常处理流程对应与同一try块的catch块将被忽略,抛出的异常将进入更高的一级。 4 关于异常的其他问题 4.1 过度使用异常首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。 4.2 将异常与普通错误区分开对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。 4.3 异常对象中包含的信息一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。
常用异常:
  UnsupportedOperationException不支持的操作
  IllegalArgumentException非法参数
  IndexOutOfBoundsException索引出界
  IllegalStateException非法状态 异常跟普通的警告等有一定的区别。当应用程序发生异常时,会中断正在执行的程序的正常指令流。也就是说,发生异常后面的代码将得不到正确的执行。甚至还会触发数据库的回退操作。
& & 在Java开发平台中,异常包括预定义异常与自定义异常。这两种异常的类型互为补充。作为一个合格的程序开发人员,要善于在应用程序中使用异常。这可以提高应用程序的交互性。同时,也是保证应用程序正常运行的前提。故异常的处理对于开发一个优秀的应用程序来说非常的重要。为此笔者认为程序开发人员应该对Java应用程序的常见异常有一个深入的了解。只有在了解这些常见异常的情况下,才能够做好自定义异常的处理。
& & 一、常见异常的类型与原因。
& & 对于Java应用程序的常见异常,笔者认为程序开发人员要从两个方面去了解。一是要知道有哪些常见的Java应用程序异常,二是需要知道哪些原因可能会造成这个异常。这不仅需要程序管理人员在日常工作中要注意积累,在必要的情况下还需要去从其它渠道收集资料。笔者对此就进行一个分析,希望能够对各位程序开发人员有一定的帮助。
& & 1、 SQLException:操作数据库异常类。
& & 现在的Java应用程序大部分都是依赖于数据库运行的。当Java应用程序与数据库进行沟通时如果产生了错误,就会触发这个类。同时会将数据库的错误信息通过这个类显示给用户。也就是说,这个操作数据库异常类是数据库与用户之间异常信息传递的桥梁。如现在用户往系统中插入数据,而在数据库中规定某个字段必须唯一。当用户插入数据的时候,如果这个字段的值跟现有的纪录重复了,违反了数据库的唯一性约束,此时数据库就会跑出一个异常信息。这个信息一般用户可能看不到,因为其发生在数据库层面的。此时这个操作数据库异常类就会捕捉到数据库的这个异常信息,并将这个异常信息传递到前台。如此的话,前台用户就可以根据这个异常信息来分析发生错误的原因。这就是这个操作数据库异常类的主要用途。在Java应用程序中,所有数据库操作发生异常时,都会触发这一个类。所有此时Java应用程序本身的提示信息往往过于笼统,只是说与数据库交互出现错误,没有多大的参考价值。此时反而是数据库的提示信息更加有使用价值。
& & 2、 ClassCastException:数据类型转换异常。
& & 在Java应用程序中,有时候需要对数据类型进行转换。这个转换包括显示的转换与隐式的转换。不过无论怎么转换,都必须要符合一个前提的条件,即数据类型的兼容性。如果在数据转换的过程中,违反了这个原则,那么就会触发数据类型转换异常。如现在在应用程序中,开发人员需要将一个字符型的日期数据转换为数据库所能够接受的日期型数据,此时只需要在前台应用程序中进行控制,一般不会有问题。但是,如果前台应用程序缺乏相关的控制,如用户在输入日期的时候只输入月、日信息,而没有年份的信息。此时应用程序在进行数据类型转换的时候,就会出现异常。根据笔者的经验,数据类型转换异常在应用程序开发中使一个出现的比较多的异常,也是一个比较低级的异常。因为大部分情况下,都可以在应用程序窗口中对数据类型进行一些强制的控制。即在数据类型进行转换之前,就保证数据类型的兼容性。如此的话,就不容易造成数据类型的转换异常。如在只允许数值类型的字段中,可以设置不允许用户输入数值以外的字符。虽然说有了异常处理机制,可以保证应用程序不会被错误的运行。但是在实际开发中,还是要尽可能多的预见错误发生的原因,尽量避免异常的发生。
& & 3、 NumberFormatException:字符串转换为数字类型时抛出的异常。
& & 在数据类型转换过程中,如果是字符型转换为数字型过程中出现的问题,对于这个异常在Java程序中采用了一个独立的异常,即NumberFormatException.如现在讲字符型的数据“123456”转换为数值型数据时,是允许的。但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理。
Java应用程序中常见的异常类还有很多。如未找到相应类异常、不允许访问某些类异常、文件已经结束异常、文件未找到异常、字段未找到异常等等。一般系统开发人员都可以根据这个异常名来判断当前异常的类型。虽然不错,但是好记性不如烂笔头。程序开发人员在必要的时候(特别是存在自定义异常的时候),最后手头有一份异常明细表。如此的话,无论是应用程序在调试过程中发现问题,还是运行过程中接到用户的投诉,都可以及时的根据异常名字来找到异常发生的原因。从而可以在最短时间内解决异常,恢复应用程序的正常运行。这个措施笔者用了很多年,非常的有效。
& & 二、异常管理的实用建议。
& & 对于操作数据库异常来说,Java应用程序只提供了一个异常类。故光凭Java应用程序的错误信息,往往不能够帮助应用程序人员排除错误的原因。只能够指名是应用程序错误还是数据库错误导致的这个异常。为了更进一步指明问题的原因,在数据库层面定义异常的时候,最好能够说明具体的原因。如前台应用程序可能会调用数据库的函数或者过程。此时在数据库的函数或者过程中做好能够说明某个异常的具体原因。如根据某个基础表生成另一张表的时候,某个字段不能够为空等等。将这些异常信息说明清楚后,如果真的遇到类似的异常时,操作数据库异常类就会将数据库的异常信息反会给前台用户。从而有利于用户寻找问题的原因,并在最短时间内改正。当然,这需要Java程序员与数据库设计人员进行协调。
& & 其次需要注意的是,异常并不是常态。也就是说,大部分异常可以通过前提的合理预见与预防,来消除。如设计到四则运算,可以在前台应用程序窗口中限制在除数字段内输入0值等手段来消除应用程序运行中可能产生的异常。不过这往往要求应用程序开发人员有比较丰富的工作经验以及由比较严密的思维逻辑。虽然这有一定的难度,但是笔者认为程序开发人员还是应该往这方面努力,而不要老是让用户作为你的试验品,让用户来发现应用程序中的设计Bug.笔者认为,只有一些实在是程序人员无法控制的因素才允许抛出异常。如果应用程序开发人员能够意识到这种错误、但是仍然没有引起重视或者采取有效的措施防止出现这种异常,那么笔者是不允许的。
ArithmeticException(除数为0的异常), BufferOverflowException(缓冲区上溢异常), BufferUnderflowException(缓冲区下溢异常), IndexOutOfBoundsException(出界异常), NullPointerException(空指针异常), EmptyStackException(空栈异常), IllegalArgumentException(不合法的参数异常), NegativeArraySizeException, NoSuchElementException, SecurityException, SystemException, UndeclaredThrowableException
1. java.lang.NullPointerException   异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)   2. java.lang.ClassNotFoundException  异常的解释是"指定的类不存在"。   3. java.lang.ArithmeticException  这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。   4. java.lang.ArrayIndexOutOfBoundsException   异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。   5. java.lang.IllegalArgumentException   这个异常的解释是"方法的参数错误",比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。   6. java.lang.IllegalAccessException   这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常
人打赏支持
码字总数 27037
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥}

我要回帖

更多关于 华为nova3 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信