当前位置:文档之家› 关于C++中的异常处理使用方法与技巧

关于C++中的异常处理使用方法与技巧

关于C++中的异常处理使用方法与技巧
关于C++中的异常处理使用方法与技巧

1关于异常处理

1.1为什么要抛出异常

抛出异常的好处一是可以不干扰正常的返回值,另一个是调用者必须处理异常,而不像以前c语言返回一个整数型的错误码,调用者往往将它忽略了。

C++的异常处理确保当程序的执行流程离开一个作用域的时候,对于属于这个作用域的所有由构造函数建立起来的对象,它们的析构函数一定会被调用。

1.2捕获所有异常

有时候,程序员可能希望创建一个异常处理器,使其能够捕获所有类型的异常。用省略号代替异常处理器的参数列表就可以实现这一点:

由于省略号异常处理器能够捕获任何类型的异常,所以最好将它放在异常处理器列表的最后,从而避免架空它后面的异常处理器。

省略号异常处理器不允许接受任何参数,所以无法得到任何有关异常的信息,也无法知道异常的类型。它是一个“全能捕获者”。这种catch子句经常用于清理资源并重新抛出所捕获的异常。

1.3重新抛出异常

当需要释放某些资源时,例如网络连接或位于堆上的内存需要释放时,通常希望重新抛出一个异常。(详见本章后面的“资源管理”一节。)如果发生了异常,读者不必关心到底

是什么错误导致了异常的发生——只需要关闭以前打开的一个连接。此后,读者希望在某些更接近用户的语境(也就是说,在调用链中的更高层次)中对异常进行处理。在这种情况下,省略号异常处理器正符合这种的要求。这种处理方法,可以捕获所有异常,清理相关资源,然后重新抛出该异常,以使得其他地方的异常处理器能够处理该异常。在一个异常处理器内部,使

用不带参数的throw语句可以重新抛出异常:

与同一个try块相关的随后的catch子句仍然会被忽略—throw子句把这个异常传递给

位于更高一层语境中的异常处理器。另外,这个异常对象的所有信息都会保留,所以位于更高层语境中的捕获特定类型异常的异常处理器能够获取这个对象包含的所有信息。

1.4构造函数中的异常

C++规定构造函数抛出异常之后,对象将不被创建,析构函数也不会被执行,但已经创建成功的部分(比如一个类成员变量)会被部分逆序析构,不会产生内存泄漏。但有些资源需要在抛出异常前自己清理掉,比如打开成功的一个文件,最好关闭掉再抛出异常(虽然系统也会把这个资源回收),因为抛出异常之后析构函数不会被执行了。

(1)C++中通知对象构造失败的唯一方法那就是在构造函数中抛出异常;(这句话并不是说我们只有这个方法才能让上层知道构造函数失败,虽然构造函数没有返回值,我们完全可以在构造函数中传入一个引用值,然后在里面设置状态,运行完构造函数之后任然可以知道是否失败,但这种情况下面对象其实还是被构造出来的,只是里面有资源分配失败而已,并且析构函数还是会执行。这和我们构造失败不生成对象的初衷不符。)

(2)构造函数中抛出异常将导致对象的析构函数不被执行;(但已经生产的部分成员变量还是会被逆向析构的)

(3)当对象发生部分构造时,已经构造完毕的子对象将会逆序地被析构;

对于构造函数可能失败的做法一般有两种

1. 在构造函数中抛出异常,本对象构造未完成,它的析构函数不会被调用。当然,我们有义务释放已经分配到的资源。简单,最常见。

2. 把资源的初始化工作放在另一个单独函数中,比如 bool init(...),由对象创建者(比如工厂方法)先调用构造函数,再调用init方法。ATL中常见。

1.5析构函数中的异常

C++标准指明析构函数不能、也不应该抛出异常。在析构函数中抛出错误,通常被认为象征着拙劣的设计或糟糕的编码。这是因为:析构函数如果抛出异常,将会导致调用标准库terminate函数,而terminate函数将调用abort函数,导致程序的非正常退出。所以析构函数应该从不抛出异常。

析构函数不能抛出异常的理由:

1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成资源泄漏。

2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃。

那么当无法保证在析构函数中不发生异常时,该怎么办? 其实还是有很好办法来解决的。那就是把异常完全封装在析构函数内部,决不让异常抛出函数之外。这是一种非常简单,也非常有效的方法。

~ClassName()

{

try{

do_something();

}

catch(...){ //这里可以什么都不做,只是保证catch块的程序抛出的异常不会被扔出析构函数之外。

}

}

1.6不会抛出的异常

C++为什么抓不到除0错的“异常”?说起来,和原生数组访问越界为什么不是异常并无两样,主要还是为了“效率/性能”。对于大多数时候的除法操作,我们会让它出现除数为0的可能性很小,当你认为有这种可能,就自己检查吧,然后自己定义一个除0错的异常。

1.7自定义异常

C++可以返回任意类型异常,包括标准异常类、基本数据类型、用户自定义的任意类(不一定要从excption继承。但是,如果要使用统一的基类捕捉异常,就必须从excption继承,且继承时要注意以下问题:

异常信息应该通过构造函数传入,最好通过what()函数来返回。示例如下:

class CtpException:public QException

{

public:

CtpException(QString& className,QString&funcName,

QString&locationMark&,QString errMsg)

{

msg.append(className);

msg.append(".");

msg.append(funcName);

msg.append(".");

msg.append(locationMark);

msg.append(",发生异常:");

msg.append(errMsg);

}

constchar*what()constthrow()

{

return msg.constData();

}

private:

QByteArray msg;

};

1.8通过引用捕获异常

不要使用new来抛出异常,不要使用指针或者传值的方式捕获异常。

应该直接使用throw CtpException抛出异常,表示将异常放到栈中,就可以自动释放。

应该使用std::exception&来捕获异常,一定要写&,这样才能防止异常拷贝,并且可以做到使用父类对象捕获子类的异常信息。

try{

QString clsName="MainWindow";

QString funName="on_pushButton_3_clicked()";

QString errMsg="自定义错误";

QString locationMark="location-1";

throw CtpException(clsName,funName,errMsg,locationMark);

}

catch(std::exception& e){

qDebug()<<"exception:"<

}

catch(...){

qDebug()<<"...:"<<"unknow error";

}

1.9如何获得异常发生位置

当程序发生异常时,我们非常需要知道哪里发生了异常。在java等语言中,可通过异常堆栈获得异常发生位置,但是在C++中,没有异常堆栈。因此,可通过在每个函数中进行错误捕捉来获得异常发生位置。示例如下:

void DBAccess::execBatchNonQuery(QSqlQuery&query,const QString&sqlStr,

const QList&ColumnValueSet)

{

try

{

query.prepare(sqlStr);

for(int i=0;i

query.addBindValue(ColumnValueSet[i]);

}

bool result=query.execBatch();

if(!result){

QString errMsg=QString("数据库语句执行错误,执行的语句是:")

+https://www.doczj.com/doc/978300582.html,stQuery()

+QString("错误原因:")+https://www.doczj.com/doc/978300582.html,stError().text();

throw CtpException(errMsg);

}

}catch(std::exception&e){

throw CtpException(e.what(),__PRETTY_FUNCTION__);

}

}

注:这里的宏__PRETTY_FUNCTION__,表示当前函数的详细信息,包括“返回值类型+类名+函数名+形参类型列表”。

工艺异常处理规定

工艺异常处理规定 1.目的 制订本标准的目的是建立生产过程中偏差及异常情况处理规程,在保证产品质量的情况下,对偏差及异常情况做出正确处理。 为建立各相关部门对生产异常的责任制度,以减少效率损失,提高生产力,特制定本规定。 2.范围 本规定适用于生产过程中偏差及异常情况的处理。 3.术语 本规定所指的生产异常,系指造成制造部门停工或生产进度延迟的情形,由此造成之无效工时,亦可称为异常工时。生产异常一般指下列异常: 1) 计划异常 因生产计划临时变更或安排失误等导致的异常。 2) 物料异常 因物料供应不及(断料)、物料品质问题等导致的异常。 3) 设备异常 因设备、工装不足或故障等原因而导致的异常。 4) 品质异常 因制程中出现了品问题而导致的异常,也称制程异常。 5) 产品异常 因产品设计或其他技术问题而导致的异常,或工艺异常。 6) 水电异常 因水、气、电等导致的异常。 4.职责 员工:完成任务,报告问题和异常。 组长:执行更改后的工艺,处理问题。 车间主任:执行更改后的工艺,报告生产,处理问题。 制造中心主任:监督执行,总结计划,公布成果。 现场改善专员:负责导入、组织、实施、推进异常管理。 技术中心:提供技术支持。 评审组:对目视管理做效果评估,确定改善成果,提供综合协调。 供应中心:处理供应商和本身带来的异常问题 质检中心:处理由品质部门带来的异常问题 业务部:处理由业务部带来的异常问题 仓库:处理由仓库带来的异常问题 计划部:处理由计划部门带来的异常问题 5.程序流程 1)异常发生时,发现异常的部门主管应立即通知技术部门或相关责任单位,前来研究对策,加以处理,并报告直属上级。 2)制造中心会同技术中心、责任单位采取异常的临时应急对策并加以执行,以降低异常带来的影响。 3)异常排除后,由生产部门填写《异常报告单》并转给责任单位。 4)责任单位填具异常处理的根本对策,以防止异常的重复发生,并将《异常单》反馈生产部。

产品质量异常处理流程精

供应商来料异常管理流程 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异常处理(精)

#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;

程序设计异常处理机制

异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦!Java 语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java语言设计者的高明之处,也是Java语言中的一个难点,下面是我对Java异常知识的一个总结,也算是资源回收一下。 一、Java异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误https://www.doczj.com/doc/978300582.html,ng.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出https://www.doczj.com/doc/978300582.html,ng.ArithmeticException的异常。 有些异常需要做处理,有些则不需要捕获处理,后面会详细讲到。 天有不测风云,人有旦夕祸福,Java的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。Java中的异常用对象来表示。Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常(类的)对象。 异常类从哪里来?有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。 异常的对象从哪里来呢?有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。 异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。 Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行,一般结构如下: try{ 程序代码 }catch(异常类型1 异常的变量名1){ 程序代码 }catch(异常类型2 异常的变量名2){ 程序代码 }finally{ 程序代码 } catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch的类型是Java语言中定义的或者程序员自己定义的,表示代

品质异常处理控制程序

目录 1.目的 (3) 2.适用范围 (3) 3.用语定义 (3) 4.参考文件 (3) 5.职责分工 (3) 6.业务流程图 (3) 7.业务流程说明 (3) 7.1 报警 (3) 7.2停产(恢复)标准 (3) 7.3让步申请及签字权限 (6) 7.4质量存档 (6) 8 流程KPI (9) 9. 附录 (10)

1.目的 完善质量反馈信息流程,使每个问题的反馈都能得到有效改善,便于异常质量信息的分析、整改,做好纠正预防措施,杜绝批量质量事故的发生,减少质量事故造成的损失,同时满足顾客的质量要 求。 2.适用范围 3?用语定义 无 4?参考文件: 《质量异常报警流程》、《停产恢复流程》、《让步申请流程》 5.职责分工 5.1质量部:负责质量信息的跟进和相关责任部门回复的整改措施进行跟进; 5.2生产部: ①负责开立影响生产现场正常进行的《品质异常信息报警单》,并负责追踪相关责任部门进行措施回复; ②负责其他部门开立的有关生产《品质异常信息报警单》进行措施回复,并要跟进行措施的验证; ③还要负责保存本部门开立的且相关责任部门回复合格的《品质异常信息报警单》及相关质量记 录; 5.3品质处: ①IPQC负责对产品的过程进行监控; ②QA负责对产品的出货进行质量检验控制; 5.4质量督办负责统计现场、出货及工序前5位问题,由现场PE牵头组织处理,并制定改善行动措施; 5.5开发、质管、工艺:等职能部门负责确认不良问题点,分析不良的根本原因,出具纠正/预防的 控制措施,如出现意见冲突,上诉一级申辩,或由事业部长定裁; 6.业务流程图: 后附 7.业务流程说明: 7.1报警: 7.1.1质量体系中出现不符合问题时由TCE&G或发现部门下达《体系纠偏单》并由质量革新部负责跟踪验证,并保存《体系纠偏单》及相关质量记录;

异常处理流程

异常处理流程及注意事项 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)评估改善措施之有效性,必要时须修改相关品质系统文件或

制程异常控制程序(含表格)

制程异常控制程序 (IATF16949/ISO9001-2015) 1.目的 为确保制程异常得到及时有效地解决,以使生产顺利进行,进而保证质量特制定本程序。 2.适用范围 适用于从物料投入开始到成品包装完成的整个生产过程。 3. 职责 3.1 生产部 3.1.1 生产部现场管理人员职责 1) 异常问题提出,做好不合格品的标识和统计; 2)严格按照处理对策执行; 3)人为作业造成异常的改善; 3.1.2 生产部PQC职责 1)异常问题的确认,制程异常通知单的发出,不合格或异常品的标识; 2)负责制程异常改善对策确认及其效果追踪,制程异常通知单的归档; 3)严格管控ECN的切入及其效果的追踪;

4)改善对策之效果确认、制程异常通知单的归档。 3.2 工程部 3.2.1主导制程异常的分析、解决; 3.2.2负责对异常问题分析、定性、归属责任; 3.2.3综合责任部门改善对策提出综合解决对策(包括临时对策,长期预防改善对策); 3.2.4反馈相关分析和对策、通报《制程异常分析报告》并归档。 3.3 品管部QE、IQC职责 3.3.1来料不良而造成的制程异常问题的分析; 3.3.2监督厂商回复改善对策并追踪和进行效果追踪。 3.4 研发东莞评测实验室职责 3.4.1对物料问题的处理提供判定依据。 4. 制程异常处理流程 4.1制程异常处理流程:附件1 4.2物料不良处理流程:附件2 注1:工程部通过现场分析和试验对问题定性,定性的过程包括对不良率、问题属性、责任归属等情况的判定。

注2:原材料不良包括外观不良、机构尺寸不良、原材料电气功能设计缺陷;研发设计不良包括软硬件匹配性、兼容性问题;制造工艺问题包括生产流程安排不当、作业方法不当造成物料的损害;人为作业问题包括未按照作业指导书作业、人员未经培训直接上线造成物料的损害等。 注3:工程部产品组初步分析,在4小时内给出临时对策(包括在线异常品、已入库异常品的处理)。 注4:责任部门根据问题性质分析问题产生原因,提出纠正措施和长期预防对策; 分析部门主要包含工程部、生产部、品管部、研发东莞评测处。 注5:PQC对临时对策、纠正和长期预防对策的执行结果进行追踪。若有效,继续正常生产;若无效,反馈到相关部门重新确认、分析问题。 5. 引用文件 5.1《PQC制程异常通知单》 5.2《制程异常分析报告》 5.3《生产部生产过程控制程序》 5.4《过程检验控制程序》 6.记录表格 6.1制程异常通知单 制程异常通知单.d oc

JAVA 异常处理实验报告

实验三异常处理 [实验目的] 1.掌握异常处理方法及熟悉常见异常的捕获方法。 [实验内容] 1.练习捕获异常、声明异常、抛出异常的方法、熟悉try和catch 子句的使用。 [实验步骤与要求] 第1题异常处理 要求声明定义两个Exception的异常子类:NoLowerLetter类和NoDigit类。再声明一个People类,该类中的void printLetter(char c)方法抛出NoLowerLetter异常类对象,void PrintDigit(char c)方法抛出NoDigit异常类对象。 [作业提交] 将代码贴在下面: class NoLowerLetter extends Exception{ String message; NoLowerLetter(char c){ message=c+"不是正数"; } public String getMessage(){ return message; } } class NoDigit extends Exception{ String message; NoDigit(char c){ message=c+"不是偶数"; }

public String getMessage(){ return message; } } class People{ public void printLetter(char c) throws NoLowerLetter{ if(c<0){ NoLowerLetter ex=new NoLowerLetter(c); throw(ex); } double number=Math.sqrt(c); System.out.println(c+"的平方根:"+number); } public void PrintDigit(char c) throws NoDigit{ if(c%2!=0){ NoDigit ex=new NoDigit(c); throw(ex); } double number=Math.sqrt(c); System.out.println(c+"的平方根:"+number); } } public class bianma{ public static void main(String args[]){ People p=new People(); try{ p.printLetter('Q'); p.printLetter(' '); } catch( NoLowerLetter e){ System.out.println(e.getMessage()); } try{ p.PrintDigit('d'); p.PrintDigit('a'); } catch( NoDigit e){ System.out.println(e.getMessage()); } } } 将结果运行截屏贴在下面:

4M2S异常处理

4M 4M2S 异常对应方案 人员: 一人员: 1 确保每线配备班长1名、配膳员1名、修理员1名(ENTER FUSER可两线配备修理员一名),且全部培训为多能工。理由:在各线有人员流动时可确保每线2-3名的顶位人员,以保证生产品质的稳定。 2 作业自责不良发生过多时:a 各线管理管理人员及现场应自我检讨:员工作业方法是否培训到位;员工情绪是否过于波动;工治具/设备是否无异常等等;b 是否有其它不良因素影响到员工的正常作业;c 尽量少批评或采用婉转的方式教育员工。理由:作业员在正常状态下作业时,无异常或很少有异常发生,在出现自责过于频繁时应是受到其它因素的影响所致,这是作为一个管理者必须做到的;批评员工只能造成员工情绪的波动化,甚至将这一情绪带入生产中,产生更多不良。 设备/ 二设备/治工具 1 首先对各线的设备及治工具作一个易损评价,对易出现异常的设备及治工具应随时确保1-2套备品,并配备专柜存放,并确保白、晚班各有一人持有钥匙;理由:在生产因易损设备及治工具异常时可暂以备品替代使用,以确保生产线不因设备及治工具的异常而影响生产乃至出荷。 2 当设备及治工具(不易损伤且无备品类)出现异常时,应先对异常的影响的程度作出相应的评价:a 在不影响FUSER品质的情况下,可边生产边通知相关技术担当马上到现场进行修理或作出紧急处理方案;理由:异常的发生对FUSER的品质无任何影响,没必要作无畏停线安排,影响生产的正常进行。 b 在无法对异常的影响程度作出相应评价或影响FUSER品质时,应立即停止生产(出现异常的生产线),并保持异常现象,同时立即知会相关技术担当马上至现场进行修理;理由:异常的发生对FUSER的品质有影响,生产应坚持以品质确保为基本方针,在品质确保的状况下再进行生产能率的提高。不能一味地追求产量而忽视品质。 三方法 各线作业员应严格按照OIC/ACP的操作方法进行作业,当对OIC/ACP的作业方法存有疑问时,应立即报告班长并知会相关技术担当进行确认,严格按照技术担当的指示方法进行作业; 理由:1> OIC/ACP为生技人员经过实践操作总结出的操作方法; 2>生技人员对机能了解清楚,操

异常管理程序

XXXXXXXX有限公司 异常管理程序 文件编号: 版本: 编制: 审核: 批准: XXXXX有限公司发布

异常管理程序 1.目的 为明确和规范公司在各种异常事件发生时相关部门及人员的作业职责和应对措施,确保产品生产、产品交付、公用事业等活动的正常进行。 2.范围 本程序规定了公司异常管理的各项控制要求。本程序适用于品质异常和公用事业异常的处理。 3.规范性引用文件 下列文件对于本文件的应用是必不可少的,凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)使用于本文件。 《进料检验管理办法》 《设备控制程序》 《工装管理办法》 《过程检验管理办法》 《OQC终检控制程序》 《内部不合格品处理程序》 《XXX集团计算机软硬件日常维护管理办法》 《物流管理控制程序》 《采购管理业务程序》 《生产过程控制程序》 《生产计划控制程序》 4.定义 下列定义适用于本标准 4.1异常:超出正常的现象,它包括设备异常、作业异常、产品异常、公共事业异常、其他异常等各种异常情况。具体参见附录1 5.职责

5.1质量管理部负责: 5.1.1确认不良以及发生影响程度(判断可否修复、特采) 5.1.2监督、验证、跟进改进对策及有效性; 5.2制造中心负责 5.2.1操作者负责发现异常时停止操作报告组长等待指示; 5.2.2线组长负责异常状况的确认以及报告提出; 5.2.3主管负责对发生异常情况的分析,确定责任部门并通报和报告质量管理部以 及相关领导。 5.3其他部门负责分析原因,采取临时对策,制订长期改进对策,检讨相关类似不 良的发生。 6.工作流程图(无) 7.文件描述:

SMT工艺异常处理流程

SMT工艺异常处理流程 目的 为了有效追踪工艺异常问题的根本原因,明确各关联部门的权责,提高异常事故处理效率,减少投诉; 适用范围 本流程适用于龙旗科技有限公司所有主板项目; 定义 SMT(Surface Mounting Technology):表面贴装技术; SMT工艺异常:因SMT设备(程序)参数的技术性缺失、原材料(主料、辅料)不良、设计错误等因素影响,导致工艺控制失效使得生产效率无法达到预定目标,使产品品质超出IPC允收标准的所有事件均称之为SMT工艺异常; 职责 工程部:分析工艺异常原因,判定异常事故的性质,提供改善建议; 研发事业部:解释设计原则,修正设计方案; 质量保证部:提供质量数据报告,反馈投诉处理意见,划分责任归属; 质量策划部:跟踪各阶段问题的及时关闭和阶段控制,对于工艺问题,结合工程分析和风险评估,协助推动研发改善; 售后服务部:反馈客户信息,调查、追踪客户端产品状态; 项目管理部:总体协调和督促项目组成员推动问题点的解决,保障项目进度; 内容 1.可制造性设计导致工艺异常的处理流程 1.1.如发现可制造性设计导致的工艺异常,由外协厂汇总问题点并输出试产报告,由驻厂NPI将试产报告发给项目组。针对《试产报告》中反馈的可制造性设计问题,由工程确认是否改版并提供分析评估意见给研发; 1.1.1.若研发对工程的分析意见无异议,则由研发执行改版,质量策划跟踪改版进度,工程负责改版确认; 1.1. 2.若工程的分析意见与研发设计要求有争议,则由项目经理和质量策划评估、解决; 2.生产过程中工艺异常处理流程

2.1.当生产中发现工艺异常时,需龙旗驻厂NPI及时进行产线状态确认,驻厂PQE及时提供《外协厂异常问题反馈单》,工程根据《外协厂异常问题反馈单》负责判断、确认并提供改善建议,PQE根据异常风险等级决定是否维持生产或停线; 2.2.生产过程中的工艺异常分类及处理 2.2.1.来料不良导致工艺异常的处理 2.2.1.1.来料不良信息反馈 2.2.1.1.1.来料不良导致的工艺异常事故,由龙旗驻厂PQE负责来料异常的信息反馈,并通知SQE联系供应商至产线配合改善; 2.2.1.2.来料不良原因分析 2.2.1.2.1.驻厂PQE主导外协厂、供应商至产线分析,并提供分析结果; 2.2.1.2.1.1.若外协厂与供应商意见一致,确认了双方认可的分析结果,再由工程根据双方的分析结果给出风险评估意见,并提供给PQE参考,由PQE决定是否换料或克服生产; 2.2.1.2.1.2.若外协厂与供应商意见分歧,未达成双方认可的分析结果,则由工程根据异常反馈信息作出判断分析,并将分析意见提供给PQE参考,由PQE协调SQE解决; 2.2.2.加工技术资料缺失导致工艺异常的处理 2.2.2.1.Gerber资料内容缺失的处理 2.2.2.1.1.驻厂NPI以邮件形式通知项目组,SMT工艺工程师进行确认,若情况属实,由研发负责文件升级并给到外协厂,NPI负责跟踪直至问题关闭; 2.2.2.2.《工艺控制事项》内容缺失的处理 2.2.2.2.1.由上海NPI负责文件升级并给到外协厂,驻厂NPI督导外协厂根据升级文件调整工艺维持生产; 2.2. 3.SMT设备(程序)问题导致工艺异常的处理 2.2. 3.1.设备性能衰减导致工艺异常的处理 2.2. 3.1.1.当外协厂SMT设备在固定周期内未进行充分的保养、升级换代等原因使性能衰减,导致工艺异常事故,则需工程介入对设备性能进行评估,并责成外协厂按照设备出厂的固有参数进行改造,再进行设备性能指标(CPK)确认,以满足龙旗产品的工艺能力为前提条件; 2.2. 3.2.设备突发性故障导致工艺异常的处理 2.2. 3.2.1.生产过程中设备突发性故障造成的工艺异常,由外协厂内部控制; 2.2. 3.3.贴片程序错误导致工艺异常的处理

数据库异常处理答案

一、实验/实习过程 实验题1在程序中产生一个ArithmeticException类型被0除的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException类的对象e 的方法getMessage给出异常的具体类型并显示出来。 package Package1; public class除数0 { public static void main(String args[]){ try{ int a=10; int b=0; System.out.println("输出结果为:"+a/b); } catch(ArithmeticException e){ System.out.println("除数不能为0"+e.getMessage()); } } } 实验题2在一个类的静态方法methodOne()方法内使用throw 产生ArithmeticException异常,使用throws子句抛出methodOne()的异常,

在main方法中捕获处理ArithmeticException异常。 package Package1; public class抛出异常 { static void methodOne() throws ArithmeticException{ System.out.println("在methodOne中"); throw new ArithmeticException("除数为0"); } public static void main(String args[]){ try{ int a=10; int b=0; int c=1; System.out.println("输出结果为:"+a/b); } catch(ArithmeticException e){ System.out.println("除数不能为0"+e.getMessage()); } } }

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所示。

《Java程序设计》上机实验报告 实验四 异常类的定义及处理

信息科学与工程学院《Java程序设计》上机实验报告 专业班级姓名学号 实验时间指导教师成绩 实验名称实验四异常类的定义及处理 实验目的1)了解异常处理方法。 2)熟悉并掌握常见异常的捕获方法。 3)熟悉JDK中已经定义的若干异常类的层次结构。 4)掌握自定义异常类的创建方法。 主要实验记录及个人小结 (包括部分实验源程序、调试结果及实验结果分析等)1.编写程序实现如下功能:生成并捕获到NegativeArraySizeException和IndexOutOfBoundsException类型的异常,并显示捕获到的异常信息。然后在此基础上生成并捕获到NullPointerException类型的异常,并显示捕获到的异常信息。 1)实验源程序: public class TestException { public static void main(String[] args){ outofBound(); arraySize(); nullPointer(); } static void arraySize(){ try{int p=-5; int test1[]=new int[p]; //不一定要是-5,只要小于0的就能捕获到无效数组长度的异常} } catch (NegativeArraySizeException e) { System.out.println("捕获异常:\n"+e); System.out.println(e.toString()); //把捕获的错误异常转变为字符串类型,传给println()方法,用以输入。 }finally{ System.out.println("捕获完成\n"); } } static void outofBound(){ try {int test2[]=new int[10]; test2[100]=1; //超出数组长度 } catch (ArrayIndexOutOfBoundsException e) { System.out.println("捕获异常:\n"+e); System.out.println(e.toString()); } finally{ System.out.println("捕获完成\n\n"); } } static void nullPointer(){ try {int test3[]=null; test3[1]=100; //空指针无法赋值 } catch (NullPointerException e) {

解决问题心得体会

[“解决问题”研讨会学习心得体会] 今天的“解决问题”专题研讨会先是听了两节课,:“解决问题”研讨会学习心得体会。 听了年轻老师宋娅的课,让我们感知了“解决问题”的教学策略,找到了自己与宋老师之间的差距。我在平常的解决问题的教学中小组讨论的较少,在今后的教学中要多设计此环节,让学生在交流中掌握新知。 听了刘光荣老师的课,让我回想起了我的小学数学老师,他的课用综合法,让学生分析数量关系,找出已知条件,并说明它是哪个量,找出问题是什么,求哪个量,心得体会《“解决问题”研讨会学习心得体会》这样的课很扎实,也给我们提供了一种教学思路。 在今后的教学中,我要把年轻教师注重培养学生的小组合作交流与年长老师的综合法两者有效的结合起来,让学生即有一个生动的情境学解决问题,又能分析数量关系,学得扎实。 听了高主任和张主任的报告,让我理清了教学“解决问题”的思路,明确了今后工作的重点是什么,以及如何处理这部分教材,让我明白了以前似是而非拿不准的东西,找到了教学的方向。令我记忆犹新的是其中的一条建议:“加强数量之间的分析,三量之间的逆变关系,记住常见的数量关系。如工效、路程、总价。”“会用数学语言表述数量关系。”这两条建议对学生数学解题能力的

提高有很多的帮助作用。这几年的改革改的摸不着头脑,让我们失去了方向,通过今天的学习让我们明确了改怎样传承旧的教学方法,怎样将新旧两种教法有机的结合起来。

[小学数学作业评价改革经验交流会学习心得体会] 纳雍乡杨柳小学张凤 我有幸参加了中心校组织的小学数学作业评价改革经验交流会的活动,这次会议有三项内容:一是观摩了上海虞怡玲老师执教的《植树问题》,二是中心小学三年级二班的数学作业展览,三是听取了《小学数学作业评价改革经验交流》的报告,小学数学作业评价改革经验交流会学习心得体会。通过这次学习活动使我受益匪浅,现总结如下: 罗卫老师执教的“植树问题”一课突出了数学思想方法这条 主线,从贴近学生生活实际和原有知识基础入手,通过学生实践体验、寻找规律、主动探究,归纳总结数量关系,拓展了学生原有的知识结构,使学生在合作交流探究过程中体验、感悟了数学思想方法,体现了新课程理念教学。主要表现在以下几点:1.突破传统,立意精准。 植树问题走进课堂,作为数学拓展内容如果处理不好往往会走进传统的解题训练上,学生如果没有得到充分的体验往往不能充分理解“棵数”与“段数”以及“总长、段数、段长”之间的关系,导致学生死记硬背“棵数=段数+1”、“棵数=段数-1”“棵数=段数”的结论,而不知其中缘由。这堂课罗老师避开了就题解题,充分考虑学生的认知规律,为学生搭建探究的“脚手架”,在剪绳子过程中,“生成画图、找规律、推算的方法框架”,这样设计的

工艺异常处理

1.9月1号扩散炉不稳定,有个角的方块电阻在36-37之间,偏低,经过调试已经稳定。对于绒面出现的花片问题,由于出现的是少数片为花片,因此做继续传下道的处理。 2.9月3号,白班留下10单功率较低难烧的片子,在旧烧结炉上寻找最佳条件进行烧结,以使功率较好。对于换了加热管的绒面槽造成做片发白,处理意见是暂时停止该槽做绒面,只做加热水用加热。 3.9月6号PE3号管氨气流量在做淀积时异常,立刻把工艺步骤跳到抽空,该管片子颜色不正常,后调到手动模式,发现压力正常,判断为机器问题,同时将该管做出颜色不正常的片子继续补做剩余时间,出来后效果良好。 4.9月7号,阳森德的片子出现倒角不齐的情况,经检查可以把同一角度的片子放一起,再调节网版相关系数,这样可以保证较快的印刷完这单片子。当晚出现停电现象,造成PE 做工艺时氨气被停,该管片子无法补做,返回清洗处洗掉薄膜。 5.9月8号,2号刻蚀机不稳定,辉光颜色黯淡,已经交给晚班陈煜辉处理。夜班出现频繁损坏印刷栅线网版,原因正在调查。凯盛的片子有几片出现边角上做不处绒面,判断为是片源问题,交由质检部处理,建议退回仓库。 6.9月8号,扩散炉方块电阻不太均与,经调试,基本在38-42之间。PE出现压力异常,换成手动模式后正常,可以继续做

片子,怀疑是机器问题。 7.9月10号,对于8号网版损坏频繁,经调节,将高度降到最低后回复正常水平。PE出现白膜(非应力片),已经传给清洗处洗掉薄膜重做PE。对于当天出现的凯盛的片源出现烧结的功率不稳定现象,经过与质检部了解,判断是片源问题。 8.刻蚀机石英罩清洗后做工艺时已经正常,同时扩散炉经过这段时间的调节已经稳定。清洗绒面处有少量的轻微发白片和花片,由于显微镜已坏,无法判断具体原因,只能继续传下道工序。 9.9月11号,PE1号管原来是做工艺必须抽到1时才能正常工艺,而今天出现了真空抽到1后做淀积时压力异常,机器问题。另外PE1号管经统计做出的功率要比其他的管子要低,因此正在调试和统计,并且以警方暂时的停了下来。 10.9月15号白班留下5单功率异常,难烧的片子,在旧烧结炉上已经寻找最佳条件烧结完毕。晚班烧结出来的功率不稳定,经检验,扩散刻蚀均正常。PE1号管仍在调试。 11.9月16号,应力片做完PE后出现色重,重洗重做后,挑选较好的留下道,其余的建议退仓库。换了加热管绒面做出的有发白情况,用碱水煮过绒面槽后再做绒面已正常。另外换过片源后出现了花片,而且出现了手指印,正在调查原因。 12.9月17号,PE一单应力片有13张颜色异常,因为边缘翘起无法镀膜造成颜色异常,建议退仓库。下午做出的片子有

Java异常处理总结(精)

Java 异常处理总结 找到一个关于异常总结的很详细的文章, 分享下. 异常在我们编程中很重,在适当的位置,合理的处理或者抛出异常,对程序来说至关重要。转:异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C 开始,你也许已经知道如何用if...else... 来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java 语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java 语言设计者的高明之处,也是Java 语言中的一个难点,下面是我对Java 异常知识的一个总结,也算是资源回收一下。 一、Java 异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误https://www.doczj.com/doc/978300582.html,ng.Error ;如果你用System.out.println(11/0,那么你是因为你用0做了除数,会抛出https://www.doczj.com/doc/978300582.html,ng.ArithmeticException 的异常。有些异常需要做处理,有些则不需要捕获处理,后面会详细讲到。天有不测风云,人有旦夕祸福,Java 的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。 Java 中的异常用对象来表示。Java 对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class ),每个异常都对应一个异常(类的)对象。 异常类从哪里来?有两个来源,一是Java 语言本身定义的一些基本异常类型,二是用户通过继承Exception 类或者其子类自己定义的异常。Exception 类及其

实验3实验报告异常处理

信息工程学院Java语言课内实习报告(201~201学年第二学期) 实习题目:异常处理 姓名: 学号: 专业:计算机科学与技术 年级班级:

一、实习目的 掌握Java的异常处理机制及相关实现方法能够在程序设计中熟练运用异常及相关类及对象。 二、实习设计过程 实验题1 在程序中产生一个ArithmeticException 类型被0除的异常,并用catch 语句捕获这个异常。最后通过ArithmeticException 类的对象e 的方法getMessage 给出异常的具体类型并显示出来。 设计如下: try { int c=a/b; System.out.print(c); } catch(ArithmeticException e) { System.out.println("Caught ArithmeticException"); System.out.println("e.getMessage(): " + e.getMessage()); } 运行结果如下: 实验题2在一个类的静态方法methodOne()方法内使用throw 产生异常,使用throws子句抛出methodOne()的异常,在main方法中捕获处理异常。 设计如下: static void methodOne() throws ArrayIndexOutOfBoundsException { throw new ArrayIndexOutOfBoundsException("数组下标越界"); } try{ methodOne(); } catch(ArrayIndexOutOfBoundsException e ){ System.out.println("错误是:"+e); } 运行结果如下:

异常情况处理流程说明

异常情况处理流程说明 一、“异常情况”包括 1、质量不合格问题。主要包括制程质量问题、售后质量问题、技术设计或图纸下发后出现问题、调试中 质量问题、外购设备物资质量问题等; 2、交货期延误问题、采购交期延误问题及其他有关生产进度的问题等; 3、生产物料损耗异常问题; 4、生产设备损坏问题; 5、员工违纪问题; 6、其它异常问题。 二、员工出现异常问题,应及时按规定报于部门领导; 三、企管部(质检部)在日常工作中发现员工出现异常问题时,应作出《整改通知》或《整改报告》,由 责任部门签收; 四、员工所属部门部长应及时落实责任人并对问题组织处理。责任人是指直接或间接造成各类问题发生的 员工包括各级管理人员。 五、责任部门部长应督促责任人填写《异常情况处理报告》,责任人应根据问题发生的原因、经过、问题 的现象或后果、问题发生的时间和发现时间,进行详细如实填写,并随后签字确认; 六、责任人填写完毕交直接主管进行原因分析,提出解决措施,并填写《异常情况处理报告》,上交部门 负责人。 1、责任人的直接主管为班长的,该班长应根据问题的具体情况认真分析,确定属于哪种原因,并分析自 己在问题中所负的责任,必须认真填写明白,不得包庇、隐瞒; 2、责任人的直接主管为部长的,则由责任人所属部门部长填写; 3、责任人为部长的,责任人可以不填写此栏,只填写“问题描述”和“责任部门处理意见”; 4、责任人为副总的,责任人填写“问题描述”和“处理意见”; 七、责任人所属部门部长应详细调查、分析问题,确定解决措施,并填写处理报告,依据公司的有关规定 并分析自己在问题中所负的责任,做出公平、公正的处理意见;该部长应本着认真客观的态度对待问题,反思自己工作的欠缺,及时纠正并预防问题的再次发生。 八、责任部门将报告交分管副总,分管副总分析问题发生原因和相关负责人的处理意见,根据公司的有关 规定,对责任人做出处理意见;并由责任部门部长将报告交企管部(质检部); 九、企管部长(质检部长)实施监督职责,本着公平、公正地原则,对问题深入分析,不确定的问题应重 新调查,并分析责任部门的处理建议是否符合公司的有关规定。若符合规定则填写问题处理报告,做出企管部(质检部)的处理意见;若不符合有关规定,或责任部门的处理意见有失公平、公正,则需

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