当前位置:文档之家› C异常处理实现(精)

C异常处理实现(精)

C异常处理实现(精)
C异常处理实现(精)

C异常处理实现: setjmp和longjmp

此文为internet上选摘,过后我会用自己的理解补充此文。

------------

将对setjmp与longjmp的具体使用方法和适用的场合,进行一个非常全面的阐述。

另外请特别注意,setjmp函数与longjmp函数总是组合起来使用,它们是紧密相关的一对操作,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,才能按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。

与goto语句的作用类似,它能实现本地的跳转

这种情况容易理解,不过还是列举出一个示例程序吧!如下:

void main( void )

{

int jmpret;

jmpret = setjmp( mark );

if( jmpret == 0 )

{

// 其它代码的执行

// 判断程序远行中,是否出现错误,如果有错误,则跳转!

if(1) longjmp(mark, 1);

// 其它代码的执行

// 判断程序远行中,是否出现错误,如果有错误,则跳转!

if(2) longjmp(mark, 2);

// 其它代码的执行

// 判断程序远行中,是否出现错误,如果有错误,则跳转!

if(-1) longjmp(mark, -1);

// 其它代码的执行

}

else

{

// 错误处理模块

switch (jmpret)

{

case 1:

printf( "Error 1"n");

break;

case 2:

printf( "Error 2"n");

break;

case 3:

printf( "Error 3"n");

break;

default :

printf( "Unknown Error");

break;

}

exit(0);

}

return;

}

上面的例程非常地简单,其中程序中使用到了异常处理的机制,这使得程序的代码非常紧凑、清晰,易于理解。在程序运行过程中,当异常情况出现后,控制流是进行了一个本地跳转(进入到异常处理的代码模块,是在同一个函数的内部),这种情况其实也可以用goto语句来予以很好的实现,但是,显然setjmp与longjmp的方式,更为严谨一些,也更为友善。程序的执行流如图17-1所示。

setjmp与longjmp相结合,实现程序的非本地的跳转

呵呵!这就是goto语句所不能实现的。也正因为如此,所以才说在C语言中,setjmp与longjmp 相结合的方式,它提供了真正意义上的异常处理机制。其实上一篇文章中的那个例程,已经演示了longjmp函数的非本地跳转的场景。这里为了更清晰演示本地跳转与非本地跳转,这两者之间的区别,我们在上面刚才的那个例程基础上,进行很小的一点改动,代码如下:

void Func1()

{

// 其它代码的执行

// 判断程序远行中,是否出现错误,如果有错误,则跳转!

if(1) longjmp(mark, 1);

}

void Func2()

{

// 其它代码的执行

// 判断程序远行中,是否出现错误,如果有错误,则跳转!if(2) longjmp(mark, 2);

}

void Func3()

{

// 其它代码的执行

// 判断程序远行中,是否出现错误,如果有错误,则跳转!if(-1) longjmp(mark, -1);

}

void main( void )

{

int jmpret;

jmpret = setjmp( mark );

if( jmpret == 0 )

{

// 其它代码的执行

// 下面的这些函数执行过程中,有可能出现异常

Func1();

Func2();

Func3();

// 其它代码的执行

}

else

{

// 错误处理模块

switch (jmpret)

{

case 1:

printf( "Error 1"n");

break;

case 2:

printf( "Error 2"n");

break;

case 3:

printf( "Error 3"n");

break;

default :

printf( "Unknown Error");

break;

}

exit(0);

}

return;

}

回顾一下,这与C++中提供的异常处理模型是不是很相近。异常的传递是可以跨越一个或多个函数。这的确为C程序员提供了一种较完善的异常处理编程的机制或手段。

setjmp和longjmp使用时,需要特别注意的事情

1、setjmp与longjmp结合使用时,它们必须有严格的先后执行顺序,也即先调用setjmp函数,之后再调用longjmp函数,以恢复到先前被保存的“程序执行点”。否则,如果在setjmp 调用之前,执行longjmp函数,将导致程序的执行流变的不可预测,很容易导致程序崩溃而退出。请看示例程序,代码如下:

class Test

{

public:

Test()

~Test()

}obj;

//注意,上面声明了一个全局变量obj

void main( void )

{

int jmpret;

// 注意,这里将会导致程序崩溃,无条件退出

Func1();

while(1);

jmpret = setjmp( mark );

if( jmpret == 0 )

{

// 其它代码的执行

// 下面的这些函数执行过程中,有可能出现异常

Func1();

Func2();

Func3();

// 其它代码的执行

}

else

{

// 错误处理模块

switch (jmpret)

{

case 1:

printf( "Error 1"n");

break;

case 2:

printf( "Error 2"n");

break;

case 3:

printf( "Error 3"n");

break;

default :

printf( "Unknown Error");

break;

}

exit(0);

}

return;

}

上面的程序运行结果,如下:

构造对象

Press any key to continue

的确,上面程序崩溃了,由于在Func1()函数内,调用了longjmp,但此时程序还没有调用setjmp来保存一个程序执行点。因此,程序的执行流变的不可预测。这样导致的程序后果是非常严重的,例如说,上面的程序中,有一个对象被构造了,但程序崩溃退出时,它的析构函数并没有被系统来调用,得以清除一些必要的资源。所以这样的程序是非常危险的。(另外请注意,上面的程序是一个C++程序,所以大家演示并测试这个例程时,把源文件的扩展名改为xxx.cpp)。

2、除了要求先调用setjmp函数,之后再调用longjmp函数(也即longjmp必须有对应的setjmp函数)之外。另外,还有一个很重要的规则,那就是longjmp的调用是有一定域范围要求的。这未免太抽象了,还是先看一个示例,如下:

int Sub_Func()

{

int jmpret, be_modify;

be_modify = 0;

jmpret = setjmp( mark );

if( jmpret == 0 )

{

// 其它代码的执行

}

else

{

// 错误处理模块

switch (jmpret)

{

case 1:

printf( "Error 1"n");

break;

case 2:

printf( "Error 2"n");

break;

case 3:

printf( "Error 3"n");

break;

default :

printf( "Unknown Error");

break;

}

//注意这一语句,程序有条件地退出

if (be_modify==0) exit(0);

}

return jmpret;

}

void main( void )

{

Sub_Func();

// 注意,虽然longjmp的调用是在setjmp之后,但是它超出了setjmp的作用范围。longjmp(mark, 1);

}

如果你运行或调试(单步跟踪)一下上面程序,发现它真是挺神奇的,居然longjmp执行时,程序还能够返回到setjmp的执行点,程序正常退出。但是这就说明了上面的这个例程的没有问题吗?我们对这个程序小改一下,如下:

int Sub_Func()

{

// 注意,这里改动了一点

int be_modify, jmpret;

be_modify = 0;

jmpret = setjmp( mark );

if( jmpret == 0 )

{

// 其它代码的执行

}

else

{

// 错误处理模块

switch (jmpret)

{

case 1:

printf( "Error 1"n");

break;

case 2:

printf( "Error 2"n");

break;

case 3:

printf( "Error 3"n");

break;

default :

printf( "Unknown Error");

break;

}

//注意这一语句,程序有条件地退出

if (be_modify==0) exit(0);

}

return jmpret;

}

void main( void )

{

Sub_Func();

// 注意,虽然longjmp的调用是在setjmp之后,但是它超出了setjmp的作用范围。longjmp(mark, 1);

}

运行或调试(单步跟踪)上面的程序,发现它崩溃了,为什么?这就是因为,“在调用setjmp的函数返回之前,调用longjmp,否则结果不可预料”(这在上一篇文章中已经提到过,MSDN中做了特别的说明)。为什么这样做会导致不可预料?其实仔细想想,原因也很简单,那就是因为,当setjmp函数调用时,它保存的程序执行点环境,只应该在当前的函数作用域以内(或以后)才会有效。如果函数返回到了上层(或更上层)的函数环境中,那么setjmp保存的程序的环境也将会无效,因为堆栈中的数据此时将可能发生覆盖,所以当然会导致不可预料的执行后果。

3、不要假象寄存器类型的变量将总会保持不变。在调用longjmp之后,通过setjmp 所返回的控制流中,例程中寄存器类型的变量将不会被恢复。(MSDN中做了特别的说明,上一篇文章中,这也已经提到过)。寄存器类型的变量,是指为了提高程序的运行效率,变量不被保存在内存中,而是直接被保存在寄存器中。寄存器类型的变量一般都是临时变量,在C语言中,通过register定义,或直接嵌入汇编代码的程序。这种类型的变量一般很少采用,所以在使用setjmp和longjmp时,基本上不用考虑到这一点。

4、MSDN中还做了特别的说明,“在C+ +程序中,小心对setjmp和longjmp的使用,因为setjmp和longjmp并不能很好地支持C++中面向对象的语义。因此在C++程序中,使用C++提供的异常处理机制将会更加安全。”虽然说C++能非常好的兼容C,但是这并非是100%的完全兼容。例如,这里就是一个很好的例子,在C++ 程序中,它不能很好地与setjmp和longjmp和平共处。在后面的一些文章中,有关专门讨论C++如何兼容支持C语言中的异常处理机制时,会做详细深入的研究,这里暂且跳过

异常处理练习题

异常处理练习题 一、选择题 中用来抛出异常的关键字是 A、try B、catch C、throw D、finally 2.关于异常,下列说法正确的是 A、异常是一种对象 B、一旦程序运行,异常将被创建 C、为了保证程序运行速度,要尽量避免异常控制 D、以上说法都不对 3.()类是所有异常类的父类。 A、Throwable B、Error C、Exception D、AWTError 语言中,下列哪一子句是异常处理的出口 A、try{…}子句 B、catch{…}子句 C、finally{…}子句 D、以上说法都不对 5.下列程序的执行,说法正确的是 public class MultiCatch { public static void main(String args[]) { try { int a=; int b=42/a; int c[]={1}; c[42]=99; } catch(ArithmeticException e) { 除0异常:”+e); } catch(ArrayIndexOutOfBoundsException e) { 数组超越边界异常:”+e); } } } A、程序将输出第15行的异常信息 B、程序第10行出错 C、程序将输出“b=42” D、程序将输出第15和19行的异常信息 6.下列程序的执行,说法正确的是 class ExMulti { static void procedure() { try {

int c[]={1}; c[42]=99; } catch(ArrayIndexOutOfBoundsException e) { 数组超越界限异常:”+e); } } public static void main(String args[]) { try { procedure(); int a=; int b=42/a; } catch(ArithmeticException e) { 除0异常:”+e); } } } A、程序只输出第12行的异常信息 B、程序只输出第26行的异常信息 C、程序将不输出异常信息 D、程序将输出第12行和第26行的异常信息 7.下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。class TrowsDemo { static void procedure() throws IllegalAccessException { procedure”); throw____new___IllegalAccessException(“demo”); } public static void main(String args[]) { try { procedure(); } ___catch (IllegalAccessException e)________ { 捕获:”+e); } } 8.对于catch子句的排列,下列哪种是正确的( ) A、父类在先,子类在后 B、子类在先,父类在后

C异常处理(精)

#include "stdafx.h" #include #include #include // 内存泄露检测机制 #define _CRTDBG_MAP_ALLOC #ifdef _DEBUG #define new new(_NORMAL_BLOCK, __FILE__, __LINE__ #endif // 自定义异常类 class MyExcepction { public: // 构造函数,参数为错误代码 MyExcepction(int errorId { // 输出构造函数被调用信息 std::cout << "MyExcepction is called" << std::endl; m_errorId = errorId; } // 拷贝构造函数 MyExcepction( MyExcepction& myExp { // 输出拷贝构造函数被调用信息 std::cout << "copy construct is called" << std::endl; this->m_errorId = myExp.m_errorId; }

~MyExcepction( { // 输出析构函数被调用信息 std::cout << "~MyExcepction is called" << std::endl; } // 获取错误码 int getErrorId( { return m_errorId; } private: // 错误码 int m_errorId; }; int main(int argc, char* argv[] { // 内存泄露检测机制 _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ; // 可以改变错误码,以便抛出不同的异常进行测试 int throwErrorCode = 110; std::cout << " input test code :" << std::endl; std::cin >> throwErrorCode; try { if ( throwErrorCode == 110 { MyExcepction myStru(110;

品质异常处理流程模板

品质异常处理流程 (公开文件,共4页) 一、目的: 规范品质异常处理流程,提高品质异常处理的时效性,确保来料质量及生产的正常运转,同时满足顾客的质量要求。 二、范围: 适用于本公司来料、制程、出货品质异常的处理。 三、定义: 3.1 来料品质异常: a、不符合相关检验标准要求,且不良率超过质量目标时; b、合格物料制程中发现重点物料不合格时; c、有经过改善且有效果确认,但又重复发生品质异常时。 3.2 制程品质异常: a、使用不合格的原料或材料; b、同一缺陷连续发生; c、不遵守作业标准或不遵守工艺要求; d、机械发生故障或精度磨损; e、其他情形影响到产品质量时。 3.3 出货品质异常: a、客户投诉或抱怨; 四、职责 4.1 来料品质异常: 品质:a.负责填写《品质异常联络单》“异常描述”部分; b.负责将《来料检验报告》、《品质异常联络单》发送于采购,抄送工程、生产; c负责品质异常改善结果确认。 采购:负责将《来料检验报告》、《品质异常联络单》发送给供应商并及时与供应商联系跟踪供应商及时回复“原因分析”“纠正与预防措施”并将结果回复品质部. 4.2 制程品质异常: 品质部: a,负责品质异常之最终判定; b,负责确认品质异常责任部门; c,负责主导品质异常案例的处理过程; d,负责对责任单位的改善结果进行追踪确认

异常责任单位: a负责品质异常的原因分析,提出临时措施及长期改善对策并执行。 生产部: a负责品质异常的改善和预防措施的实施及验证改善措施的有效性; 其它相关单位: a在需要时进行异常改善的配合 4.3 出货品质异常: 品质部: a负责将品质异常通知各部门及确定责任部门; b负责异常改善后的跟踪确认; c负责处理客户抱怨 异常责任单位: a负责品质异常的原因分析,提出临时措施及长期改善对策并执行。 生产部: a负责品质异常的改善和预防措施的实施及验证改善措施的有效性; 营业部: a负责将客户抱怨反馈给相关部门。 其它相关单位: a在需要时进行异常改善的配合 五、工作程序: 5.1 进料品质异常: 5.1.1 依相关检验标准判定不合格,针对不合格物料标示“不合格”,并立即移至不良品区域。 5.1.2 异常成立4小时内开立《品质异常联络单》通知采购。 5.1.3 采购接《品质异常联络单》后4小时内转责任供应商。 5.1.4 供应商需于1个工作日内针对异常物料提出临时对策,如对异常内容有疑问,需在4 小时与品质相关人员确认清楚。 5.1.5 供应商必须在《品质异常联络单》要求的期限前(如无明确要求,默认为《品质异常联络单》发出后2个工作日内)回复完整的改善方案。 5.1.6 品质部对供应商回复内容进行确认,针对改善措施不合格部分予以退件,要求供应商重新回复。改善措施合格,则报告予以归档,跟踪后续进料品质状况,依5.1.7执行。 5.1.7 针对供应商改善后产品加严检验,连续追踪3批无异常予以结案,转正常检验;连续追踪3批中途发现不良现象仍存在,则重复5.1.2-5.1.7。 5.1.8 如供应商改善措施回复后连续2个月无进料,则强制结案,后续进料依正常检验执行。 5.1.9

Java语言中的异常处理机制

Java语言中的异常处理机制 导语:为了加强程序的健壮性、流畅性、稳定性,就需要考虑有可能发生的异常,并进行相应的处理。下面就由为大家介绍一下Java语言中的异常处理机制,欢迎大家阅读! 1概述 在应用程序运行的过程中,经常会出现这样一些现象:用户不按照要求输入、需要进行处理的文件丢失、分母为零、数组下标超出预定范围、网络中断等,我们把这种现象称为异常。由于异常情况总是难免的,所以一个好的应用程序不仅要满足用户的基本需求,还要具备处理有可能出现的异常情况的能力,即程序必须具备较强的容错能力,把这种对异常进行处理的机制称为异常处理。对异常处理有两种常见方法:计算机系统遇到错误,给出出错信息并结束正在运行的程序;由程序员在程序中加入异常处理的功能。早期的程序设计语言没有提供专门进行异常处理的功能,程序员在编写程序的过程中,进行处理异常的代码往往和正常的代码混杂在一起,导致程序的可维护性和可读性下降。Java语言采取了异常处理机制,其方式为“抛出-捕获”,一个异常一旦产生,Java语言采取相应的机制来处理它,避免出现死循环、死机以及其他更大的危害,尽可能预防错误代码带来的不可预期的后果,整个程序的安全性得到了极大的提高。 2Java语言中的异常概述 Java语言提供了功能强大的异常处理机制,将所有处理异常的代码集中放置,以保证正常功能代码和处理异常的代码分开。在Java

程序设计语言中,采用了大量的异常类来进行处理,这些异常类可分为两大类:https://www.doczj.com/doc/7615132134.html,ng.Exception和https://www.doczj.com/doc/7615132134.html,ng.Error。Exception 类解决由程序本身及环境所产生的异常。而Error类则处理较少发生的内部系统错误。Exception类异常可以捕获并进行相应处理,而Error类异常,则是由用户按照系统提示关闭程序。常见的异常类如下表所示: 在以上常见的Java异常类中,每个异常类反映一类异常错误,其中包含了异常错误信息和处理方法。当程序运行过程中,出现一种异常现象,产生一个相应的异常类对象,再由相应的异常类进行处理,从而避免对系统产生更大的危害,以保证程序的正常运行。 3常见的异常处理方法 常见的异常处理方法有两种:一种处理异常是在产生异常的方法中,使用try…catch…finally结构;还有一种是进行异常的移交,使用关键字throws和throw交给上层方法去处理异常。 在该案例中,对三种异常进行了捕获,分别是数组下标越界、输入数据格式不正确和Exception异常,当触发某种异常,则对相应的异常异常进行处理。Exception异常类是所有异常的基类,当出现catch块没有进行捕获的异常,则采用Exception异常类进行异常处理。 异常的移交: 实例分析:初始化参数x使用了-2,将触发NegativeArraySizeException异常,但在Sum方法中不对该异常进

产品质量异常处理流程(精)

供应商来料异常管理流程 1. 目的: 规范来料产品的异常处理流程控制,提高来料合格率。 2. 范围: 本规范适用于所有外购零部件及外包加工件。 3. 职责与权限: 3.1生技部:负责检测治具的制作。 3.2质量中心:负责来料异常的提出、分析、处理。 3.3生产部:负责来料异常协助处理。 3.4研发部:负责来料异常的分析、处理。 3.5生管部:负责确认来料品上线使用时间。 3.6采购部:负责来料异常与供应商的纠通取得异常的处理。 4. 名词定义: 4.1不合格:未满足产品的质量要求。 4.2 A类:单位产品的极重要质量特性不符合规定,或者单位产品的质量特性极严重不符合规定。 4.3 B类:单位产品的重要质量特性不符合规定,或者单位产品的质量特性严重不符合规定。 4.4 C类:单位产品的一般质量特性不符合规定,或者单位产品的质量特性轻微不符合规定。 5、异常处理流程控制 5.1 IQC依据检验指导书、封样、评估报告等资料检验,发现来料品不满足质量要求。 5.2 IQC将自已判定为不合格的产品经工程师、部门主管核对确实为不合格品。 5.3 IQC 立即填写《供应商异常矫正单》进行处理。 5.4 质量中心主管主导组织针对异常讨论,参与人员:采购、PIE、质量中心经理、研发工程师、研发总监、厂部厂长及其相关人员。 6、异常分类: 6.1 外观不良:表面有划痕、水印、字体不清、表面气泡、砂眼、黑点、缺料、油污、毛刺、变形、色差、氧化及电镀层脱落、标识规格错误、无料号贴纸、无出厂检验报告等。 6.2性能不良:尺寸与图纸不符、适配过大,过小、色温,波长,亮度不符、电压,电流不符等。 7、异常处理方式 7.1将不良品返回供应商进行返工、返修、报废等。

C++异常处理机制全解

C++异常处理机制全解 ▌异常处理(Exception handling) ●返回一个错误码进行异常处理(C语言): 例: boolfunc(float a, float b, float& c){ if(b==0){ return false; } c=a/b; return true; } int main() { float a=10; float b=0; float c=0; bool result=func(a, b, c); if(!result){ cout<<"The func fails!"<

int main() { float a=10; float b=0; float c=0; try{ //测试条件; func(a, b, c); //func1(); //func2(); } catch(const char* str){ //捕获异常信息; cout<

品质异常处理流程

品质异常处理流程 1.目的 为了使品质异常发生时,处理过程有据可依,使重大品质异常在规定的时间内得到有效改善,防止相同的问题重复发生,降低品质成本,确保产品质量符合要求。 2. 适用范围 适用于公司制程控制。 3. 名词释义 品质异常:因制程中出现了品质问题而导致的异常,也称制程异常。 停机:生产线生产出的产品不符合规定要求时或生产线不具备开机条件而已开机时,作停机处理,并下发《品质异常反馈单》。 4. 职责 检验科负责品质异常的反馈与跟进。 责任部门负责对品质异常进行分析、改善与预防及不良品的处理。 5. 作业流程 品质异常问题分类

异常问题处理流程 5.2.1当出现以上异常情况时,QC迅速对已发现的问题品作好标识并隔离。 5.2.2问题反馈 5.2.2.1发现人员或QC立即向上级或责任部门报告。 5.2.2.2根据本流程的要求填写《品质异常反馈单》并传递到责任部门。 5.2.2.3一般情况发《品质异常反馈单》即可,若某一问题多次发生,或问题较严 重,可能会导致批量不合格或客户重大投诉时。检验科发出《纠正和预防措施处理单》,要求责任部门改善。 5.2.3异常问题处理 5.2.3.1当缺陷不影响产品的性能(上表不需停机的问题),仅外观不良、非关键尺 寸超差时或问题未最终确认时,在得到检验科长级或厂长同意后,不需要停机,可进一步确认或执行在线分选。 5.2.3.2当生产线出现异常时(上表中需停机的问题),相关人员参照本流程的要 求,暂停有问题的机器或工位的操作。 5.2.4停机的时机 5.2.4.1 出现上表中需要停机时,QC直接下达停机指令,即上述表中所致A类问 题,员工/主操/领班应主动停机。 5.2.4.2 出现需要停机时,QC直接下达停机指令,相关部门不执行的,QC领班跟 进处理。即上升为B类问题。 5.2.4.3 出现需要停机时,QC及 QC领班先后要求停机,相关部门仍不执行的, 及时反馈到检验科长,由检验科长跟进处理,即上述的C类问题。 5.2.5纠正行动

C 中异常处理的语法 try catch throw - 大漠一抹云 樊书林 - 博客园

C 中异常处理的语法try catch throw - 大漠一抹云樊书林 - 博客园 C++中异常处理的语法。 关键字 1、try 2、catch 3、throw 其中关键字try表示定义一个受到监控、受到保护的程序代码块;关键字catch与try遥相呼应,定义当try block(受监控的程序块)出现异常时,错误处理的程序模块,并且每个catch block都带一个参数(类似于函数定义时的数那样),这个参数的数据类型用于异常对象的数据类型进行匹配;而throw 则是检测到一个异常错误发生后向 外抛出一个异常事件,通知对应的catch程序块执行对应的错误处理。 语法

1、还是给一个例子吧!如下: int main() { cout << "In main." << endl; //定义一个try block,它是用一对花括号{}所括起来的块作用域的代码块 try { cout << "在try block 中, 准备抛出一个异常." << endl; //这里抛出一个异常(其中异常对象的数据类型是int,值为1) //由于在try block中的代码是受到监控保护的,所以抛出异常后,程序的 //控制流便转到随后的catch block中 throw 1; cout << "在try block 中, 由于前面抛出了一个异常,因此这里的代码是不会得以执行到的" << endl; } //这里必须相对应地,至少定义一个catch block,同样

它也是用花括号括起来的 catch( int& value ) { cout << "在catch block 中, 处理异常错误。异常对象value的值为:"<< value << endl; } cout << "Back in main. Execution resumes here." << endl; return 0; } 2、语法很简单吧!的确如此。另外一个try block可以有多个对应的catch block,可为什么要多个catch block呢?这是因为每个catch block匹配一种类型的异常错误对象的处理,多个catch block呢就可以针对不同的异常错误类型分别处理。毕竟异常错误也是分级别的呀!有致命的、有一般的、有警告的,甚至还有的只是事件通知。例子如下: int main() {

如何使用异常处理机制

如何使用异常处理机制 《PHP核心技术与最佳实践》第1章面向对象思想的核心概念,本章将就面向对象一些概念展开讨论,其中重点讨论PHP特色的面向对象的风格和语法,并通过相互借鉴和对比,使读者认识PHP自身的特点,尤其是和其他语言中不同的地方。本节为大家介绍如何使用异常处理机制。 1.6.1 如何使用异常处理机制(1) 异常的思想最早可以追溯到20世纪60年代,其在C++、Java中发扬光大,PHP则部分借鉴了这两种语言的异常处理机制。 PHP里的异常,是程序运行中不符合预期的情况及与正常流程不同的状况。一种不正常的情况,就是按照正常逻辑不该出错,但仍然出错的情况,这属于逻辑和业务流程的一种中断,而不是语法错误。PHP里的错误则属于自身问题,是一种非法语法或者环境问题导致的、让编译器无法通过检查甚至无法运行的情况。 在各种语言里,异常(exception)和错误(error)的概念是不一样的。在PHP里,遇到任何自身错误都会触发一个错误,而不是抛出异常(对于一些情况,会同时抛出异常和错误)。PHP一旦遇到非正常代码,通常都会触发错误,而不是抛出异常。在这个意义上,如果想使用异常处理不可预料的问题,是办不到的。比如,想在文件不存在且数据库连接打不开时触发异常,是不可行的。这在PHP里把它作为错误抛出,而不会作为异常自动捕获。 以经典的除零问题为例,如代码清单1-16所示。 代码清单1-16 exception.php 1.// exception.php 2.getMessage(); 9.$a=-1; 10.}

生产异常处理流程

A版 汇签: 制定:审核:批准:修订记录:

1.目的 为了规范产线发生异常时,能及时、准确地反映并能通过相关人员确认、分析、及时解决,确保生产正常进行。 2.适用范围 适用于客户与工厂合作产品之生产线发生的异常现象。 3. 职责 3.1 工厂品质:提出异常问题,确认是否属实。 3.2 工厂工程:负责产线异常分析,找出问题原因,提出改善对策。 3.3 工厂:跟进改善结果及效果确认;对来料进行管控。 3.4 工厂品质:提供异常的最终处理方案,并对改善方案评估/验证;供应商 改善报告回复及监控。 3.5 客户项目、结构、工程:负责结构、软/硬件异常问题的解决。 3.6 客户采购:负责来料异常商务方面的处理。 3.7 客户计划:负责异常发生时总体计划的协调和异常发生产生的工时和物 料的签合。 3.8 质量总监:让步接收最终审批。 4. 异常处理流程 4.1工厂仓库按客户计划要求根据及套料单领取物料安排生产! 4.2产线在生产中发现产品与样板不符、功能缺失、装配出来的成品达不到标 准要求或来料无法使用等现象时,及时上报、工厂品质&工程等相关人员确

认。 4.2 工厂品质确认异常可接受,通知产线继续生产;如确认异常成立则交工厂 工程分析同时开出《生产异常报告》。 4.3 经工厂工程分析,给出初步分析结果,结果分为工艺问题、设计问题、来料问题。 4.4 由工厂工程分析为工艺问题,由工程辅导产线纠正生产工艺,工厂品质 监督确认,产线恢复正常生产。 4.5 经工厂工程初步分析异常属于设计问题,在能力范围内能解决的自行处 理,但需将解决办法知会客户,若无法解决的则书面知会客户品质、项目、结构、计划。由客户计划主导协调客户项目结构分析在30分钟内给出临时处理解决办法,经工厂品质确认合格恢复生产;对于后期的改善对策,由客户品质主导负责协调项目、结构工程等一起实施有效的解决对策并进行验证,得到工厂品质确认方可进行生产安排! 4.6由工厂工程及品质确认异常是来料问题,第一时间以邮件通知客户计划、 品质、采购,并要求客户品质在30分钟内对物料问题给予回复处理意见(临时解决办法),工厂给予相应配合和支持!同时客户品质联系供应商到工厂工厂及时解决,并要求供应商给出不良原因分析及改善报告回复,客户品质对其进行验证,同时要求供应商挑选符合品质标准的物料经品质确认后方可恢复生产。 4.6.1若供应商没在规定时间(原则上要求供应商4小时内)到工厂处理,先 由采购或品质与供应商沟通,如果供应商同意接收工厂工厂挑选并承担其挑选费用和不良物料,产线予以上线生产!

java异常处理试题及答案

异常处理练习题 一、选择题 1.java中用来抛出异常的关键字是 (C) A、try B、catch C、throw D、finally 2.关于异常,下列说法正确的是(A) A、异常是一种对象 B、一旦程序运行,异常将被创建 C、为了保证程序运行速度,要尽量避免异常控制 D、以上说法都丌对 3.(A)类是所有异常类的父类。 A、Throwable B、Error C、Exception D、AWTError 4.java语言中,下列哪一子句是异常处理的出口(C) A、try{…}子句 B、catch{…}子句 C、finally{…}子句 D、以上说法都丌对 5.下列程序的执行,说法错误的是 (C) public class MultiCatch { public static void main(String args[]) { try { int a=args.length; int b=42/a; int c[]={1}; c[42]=99; System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越边界异常:”+e); } } } A、程序将输出第15行的异常信息 B、程序第10行出错 C、程序将输出“b=42”

D、程序将输出第15和19行的异常信息 6.下列程序的执行,说法正确的是(D) class ExMulti { static void procedure() { try { int c[]={1}; c[42]=99; } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越界限异常:”+e); } } public static void main(String args[]) { try { procedure(); int a=args.length; int b=42/a; System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); } } } A、程序只输出第12行的异常信息 B、程序只输出第26行的异常信息 C、程序将不输出异常信息 D、程序将输出第12行和第26行的异常信息 7.下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。class TrowsDemo { static void procedure() throws IllegalAccessExcepton { System.out.println(“inside procedure”); throw__new_____IllegalAccessException(“demo”);

制程异常处理流程

1. 目的 规定当制程出现异常时的处理流程及各相关部门的责任, 使异常能够得到及时解决,确保生产正常 运行。 2. 适用范围 适用于制程出现异常时的处理。 3. 定义: 无。 4. 职责 4. 1各生产车间:当生产过程中制程出现异常时发出《不合格品报告单》通知 IPQC 4. 2品质部IPQC :对制程异常现象进行确认,并通知 QE 或PE 来现场进行原因分析和处理 4. 3品质部QE :对制程异常进行原因分析并确认责任部门,并对责任部门制订的改善对策进行验 证 4. 4工程部PE :对功能及结构性制程异常进行原因分析并确认责任部门 4. 5责任部门:负责制定异常的临时对策和永久对策并实施。 5. 作业程序 5. 1制程异常发出的时机: 5. 1. 1当同一不良现象重复出现且不良率超出备损率时; 5. 2制程异常的发出、确认及通知: 5. 2. 1由车间生产线根据不良现象和事实填写《不合格品报告单》,填写内容包括:订单号、 产品型 号、生产数量、不良数量、不良率、提出部门、提出时间、订单交期、不良现象描述。 经车间主管(经理)审核后给车间IPQC 确认; 5. 2. 2 IPQC 在收到车间发出的《不合格品单》后,对异常现象、不良数量、不良率进行确认, 并将确 认结果填写在“IPQC 确认”栏。如果确认结果与车间填写的内容不相符时,可退回 车间重新填写。 5. 2. 3 IPQC 确认后以电话形式通知以下人员到发生异常的现场进行原因分析: 5. 森一泰电子科技有限公司 作业指导书 制程异常处理作业指导书 2. 3. 1如果是外观异常,电话通知制程 QE 工程师到现场进行原因分析; 2. 3. 2如果是功能和结构性异常,电话通知 QE 工程师和工程部PE 工程师到现场进行 原因分析; 2. 3. 3如果电话联络不到相关产品的 QE 工程师或PE 工程师时应通知其直接上司做出 相应安排。 5. 5.

异常处理

异常处理: (1) #include void main( ) { try { int a=8; double b=8.8; throw a Class exception { private: char *ch; Public: Exception(char *m) { ch=m; } V oid print( ) { cerr< Class exception { private: char *ch; Public: Exception(char *m) { ch=m; } V oid print( ) { cerr<

异常处理流程

异常处理流程及注意事项 1.发现不良; (1)确认所采用标准的完整性和有效性; (2)熟练掌握检验所涉及之相关标准或其他文件; (3)严格按抽样标准取样,注意均匀,来料检验须注意来料的不同时间,批号,生产班次等; (4)了解以往的品质状况及其品质履历; (5)掌握品管之检验技巧; 2.标示,区分,隔离; (1)标示,隔离须涉及到具体的不良品和可疑批次,不合格标示要完整且必要时要口头或书面知会先相关人员,以避免他人 混淆误用为原则; (2)不合格标示,隔离须注明不合格原因,检验员,检验日期,进料检验另须注明检验单号,并知会相关人员; 3.初步分析判断,并知会相关单位及现场领导; (1)确定不良等级,异常比率,影响度和影响面,必要时须及时知会相关单位之人员; (2)针对制程或成品类异常,要及时研拟临时对策; (3)进料之异常可能涉及组装或功能之不良,需通过试组装来确定其严重性和影响度,必要时可请工程部帮忙确认; 4.异常提报; (1)异常提报时要注意时效性和准确性,异常单的填写需准确完

整,成品异常要确认追溯批号,PO#与数量; (2)须标示和提供不良品; (3)会签的填写和勾选须正确完整; 5.跟催各相关单位签单状况,根据会签结果处理异常; (1)品管必须跟催会签状况,有迟迟未签之单位必须及时跟催,如多次跟催无效,可请领导协助,以避免异常处理的时效; (2)有签核S物料时,按S物料作业流程处理,并将处理结果维护到异常单中; (3)当物料急上线,且部门领导有同意采用,而高级主管又不在厂内,无法立即签核S单时,可询问品质经理,先输S物料, 以便后续作业; (4)当会签单位处理意见不一致时,需反映部门领导,并确认最终处理结果; 6.确认处理结果; (1)全检或重工后的,需重新确认品质状况,成品类有拆箱之异常,需填写成品不合格处置报表; (2)S物料须对其品质进行跟踪,有异常要及时提报; 7.追踪改善措施; (1)注意改善措施回文必须由责任单位之领导签核,并且要在7个工作日内完成改善措施回文; 8.确认改善结果; (1)评估改善措施之有效性,必要时须修改相关品质系统文件或

1.异常处理机制(精)

1. 异常机制 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。 异常处理的流程: ①遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象。 ②调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码。 2 异常的分类 异常的分类: ①异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。 ② Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 每个类型的异常的特点 Error体系: Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。 Exception体系包括RuntimeException体系和其他非RuntimeException的体系: ① RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现

产品质量异常处理流程汇总

XXXXXXXX 有限公司 产品质量异常处理流程 YCCL---2012 编制:版号: 审核:受控状态: 批准:分发号:

2012. 发布2012. 3 .实行3 .

产品质量异常处理流程 1.0目的: 规范品质异常处理作业,使品质异常发生时处理过程有据可依有 规可循,使品质异常能在规定的时间内有效改善,并采取相应的预防措施,防止相同问题重复发生。降低处理品质异常的成本,满足客户质量要求。 2.0范围: 品质异常、制程异常、出货前异常、客户抱怨 3.0定义: 3.1品质异常3.1.1产品品质异常: 3.1.1.1不符合相关检验标准要求,且不良率超过质量目标时。 3.1.1.2有经过改善且有效果确认,但又重复发生品质异常时。 3.1.1.3客户抱怨及退货时。 3.1.1.4其它情形,影响到产品品质时。 3.1.2制程异常3.121不遵守操作标准操作。 3.122虽然照操作标准操作,但因各种标准不完善,以致无法控制变 异原因。 3.1.2.3使用不合格的原料或材料。 3.124机械发生故障或磨损。 3.125其它情形,可能存在品质隐患时。

4.0职责 4.1质控部: 4.1.1负责各生产部门质量异常不良的提出4.1.2负责不良现象及不良比例的确认和判定,临时对策效果的确认 及不良物料的处理。 4.1.3负责质量外观不良类的最终判定与裁决。 4.2技术部: 负责结构类和功能类质量异常的分析与临时对策的提出。 4.3生产部门: 负责按质控部/技术部临时对策的执行,并配合处理相关不良品处理。 4.4业务部: 负责接收客户投诉并反馈信息至技术、质控,投诉分析完成后把处理结果反馈至客户。 4.5其它部门: 在问题涉及时负责问题的分析、措施的提出及执行。 5.0工作程序: 5.1进料品质异常: 5.1.1 IQC依相关检验标准判定不合格,针对不合格物料标示“不合 格”,并通知仓库立即移至不良品区域。 5.1.2异常成立1小时内开立《品质异常处理单》通知采购/生产管理 部门。

OpenCV异常处理机制

OpenCV异常处理机制 OpenCV异常处理机制分类: openCV 2010-12-14 21:49 187人阅读 评论(1) 收藏 举报 很多函数,都会对参数的有效性进行判断,不符合要求,直接弹对话框,然后程序崩溃,逼得你不得不正确调用他。这个属于编程的逻辑错误,就像assert一样,用于排除编码错误,这和业务错误处理的层次是不同的。 一般,我们仿照这种模式,如下 view plainprint?int TestCvError( IplImage *pImgGray, int iNum)

{ CV_FUNCNAME( "TestCvError" ); __BEGIN__; if (iNum <= 1 ) CV_ERROR(CV_StsOutOfRange, "参数iNum必须大于1"); if( !pImgGray ) CV_ERROR( CV_StsNullPtr, "Null pointer to pImgGray" ); if( pImgGray->depth != IPL_DEPTH_8U && pImgGray->nChannels != 1 ) CV_ERROR( CV_StsUnsupportedFormat, "Only 8-bit grayscale images are supported" ); //函数主要实现部分__END__; return 0; } int TestCvError( IplImage *pImgGray, int iNum) { CV_FUNCNAME( "TestCvError" ); __BEGIN__; if (iNum <= 1 ) CV_ERROR(CV_StsOutOfRange, "参数iNum必须大于1"); if( !pImgGray ) CV_ERROR( CV_StsNullPtr, "Null pointer to pImgGray" ); if( pImgGray->depth != IPL_DEPTH_8U && pImgGray->nChannels != 1 )

产线异常处理流程及技巧

产线异常处理流程及技巧 一.品管人员问题处理之流程(步骤) 发现问题分析问题解决问题预防问题 备注: 品管人员之所以不同于工程人员处理问题之关键在于品管人员用品管技能, 品管统计手法,逻辑推理等方法来进行问题的分析与处理、 A.发现问题 ●不良现象(必须了解清楚及正确之数据) 发生日期,不良数﹑投产数﹑不良率﹑不良发生点﹑不良状况(不良状况就是怎样产生的), 亦即何种测试条件下之测试不良,具体详细之不良情形、相关的信息,在我们处理问题前, 必须清楚无误地掌握到、 Case1: 1.4/27,产线发现PUH不良,不良率5%、 2.产线Loader test站,发现较多托盘进出过缓,分析为托盘不良、 3.贵司4/7来料之3374365191之碟盖,批量1000pcs,在我司检验时发现表面有严重刮伤 之不良现象,不良率2、5%、 4.贵司4/22来料之1232001520陶瓷(1500Pf +/-10%) 450k,在我司检验时发现本体上 上有两种文字印刷,见图、 B.分析问题 此项来讲﹐为SQE处理问题之关键﹕怎样判定此部分之不良就是原材料造成还就是产线制程造成﹖基本上我们应能通过种种的品管手法及逻辑推理手段中作出进一步的判定, 当然, 从某种程度来瞧, 其效果有时并不一定如理想中的那么直接, 但从另一方面讲﹐对我们来处理产线问题绝对就是有益的﹐现例﹕当产线发生不良,并初步怀疑为组件不良所致, SQE该如何处治? 通过何种方式去剖析并解决问题、 ●不良现象与组件之关联, 其相关关系如何? 找出组件不良之相关与机台不良之相关联系参数、如其中的某个参数, 规格, 外观等不良, 就是否对产品(机台)有直接的影响?以往历史中就是否有类似之不良? 在分析问题前,我们必须展开相关的联想并设问、 ●不良之确认 分析前, 我们应该对所产生的现象作进一步的确认, 确认所产生的现象, 确实为不良, 否则, 以下相关之工作将只能就是徒劳、 *不良之现象,就是否确实为不良(超出规格之要求)、 *就是否确实为组件fail、

生产异常处理机制

广东樱雪有限公司文件组装车间异常工时责任追究考核管理办法(修订版)为了确保制造部月度产量目标达成,确保公司生产经营紧张有序,生产压力在各生产支持主责模块间有效传递与分解,实现不停线、不断线、不下线,及时暴露生产异常并进行有效责任追究,经公司研究决定特制定本考核管理办法。一、总装车间生产支持主责模块及必须有效支持的项目

二、主要生产异常类型与主责模块责任界定

三、各类生产异常情况责任人分解 四、生产异常情况异常工时责任追究执行标准

五、生产异常责任追究运作模式 1、组装车间在生产过程中出现异常情况时由生产线线长、物料调度(指仓管 的方式通知主责模块第一责任 人,相关责任人收到异常信息后应立即(要求在接到信息的 现场进行处理和确认,如果不到现场处理和确认则视同默认车间反馈的异常事件及处理异常对车间生产影响的时间; 2、的形式通知主责模块第一责任 人(责任人到达现场除外),同时将异常工时与责任模块第一负责人进行口头初步确认; 3、的异常情况,由生产线线长(指发泡总装线)、物料 调度(指仓管员)在填写《异常工时责任追究反馈表》在上交车间主任审核,车间主任审核完后在各生产部部长审批; 4、《异常工时责任追究反馈表》审批流程:生产线线长、仓管员(填写)→ 车间主任(审核)→各生产部部长(审批); 5、各生产部部长将审批完后的《异常工时责任追究反馈表》在 的形式发送至相关责任人处进行公示; 6、相关责任人在收到《异常工时责任追究反馈表》后默认视同接受,如果有

各生产部部长进行沟通反馈,各生产部部长收到异议反馈后组织异议调查最终将以事实依据作为最终裁定; 7、最终裁定的《异常工时责任追究反馈表》将在事件发生日的 8、生产副总助理汇总上月所有异常工时责任追究统计表输出《异 常工时责任追究月度处罚明细表》,经制生产副总(审核)、总经理(审批)后报送行政部(执行扣罚); 9、异常工时责任追究月度处罚金额在责任人当月工资中扣除; 10、各班组负责人根据本班组异常工时产生的罚款额度以 形式提交申请,经各制造部部长(一审)、生产副总(二审),生产副总(批准)后报送各生产部车间统计员将罚款额度纳入受影响班组的当月工资总额; 六、其他事项 1、本考核管理办法由生产部负责起草、修订、解释、执行; 2、本考核管理办法从2013年*月*日起试行考核; 3、为了提高各主责模块对异常工时改进的重视程度,要求各主责模块每月收 到正式版《异常工时责任追究月度处罚明细表》后的三个工作日向生产部提交《异常工时改进方案》; 4、各主责模块提交的《异常工时改进方案》,要求要对产生的异常工时进行数 据分析、原因总结、明确改进措施、落实责任人与改善进度; 5、生产部对各部门的《异常工时改进方案》进行收集、审核、评价; 6、行政部对各主责模块《异常工时改进方案》的评价结果纳入部门月度绩效 考核,根据改进的效果对责任部门实行扣分或加分;

相关主题
文本预览
相关文档 最新文档