异常安全简例

本文详细介绍了C++中的异常处理,包括throw、try和catch的使用。通过一个具体的例子展示了如何在除数为0时抛出并捕获异常,利用runtime_error类和what()函数进行错误信息的显示。异常处理机制确保了程序在遇到错误时能够优雅地处理并提供反馈。

异常是指存在于运行时的反常行为,典型的异常包括失去数据库的连接以及遇到意外的输入。

异常处理机制包括检测和处理这两个部分。

C++中通过throw 抛出异常,try主要是检测可能出现问题的部分,catch 用来捕异出现的异常并提供解决方案。

下面来看一个例子:输入两个整数,求商,并且当除数为0时异常。代码如下:

#include<iostream>
#include<stdexcept>

using namespace std;
int main()
{
#if 0
	int i,j;
	cin>>i>>j;
	cout<<i/j<<endl;
#else

	int i,j;

label:
	while (cin>>i>>j)
	{
		try{
				if(j==0)
					throw runtime_error("fail:divisor is 0");		
			}
		catch(runtime_error err)
		{
			cout<<err.what()<<"\ntry again? Enter y or n"<<endl;
			char c;
			cin>>c;
			if(c=='n')
				break;
			else
			{
				cout<<"entry two number:"<<endl;
				goto label;
			}
		}
		cout<< i/j <<endl;
	}
#endif
}

runtime_error是 stdexcept中定义的异常类 表示只有在运行时才检测出问题。

what( )是runtime_error类中的一个成员函数,返回值是初始化一个具体对象时所用的string对象的副本。

//其实以上的抛出异常之后用what()来接收,和线程结束时 pthread_exit(void * retval)的 retval能被线程回收 pthread_join( pthread_t thread , void **retval) 获取有点像,关于线程结束、回收的内容看笔者前面的文章即可。

上面的简例结果如下:

总结:本文用简单的例子介绍了 throw try catch 的用法。

### Spark编程实现示代码 以下是基于Spark的简单实现示代码,涵盖常见的任务场景。这些示展示了如何使用Spark进行分布式计算。 #### 示1:估算π值 以下代码展示了如何通过随机采样的方式估算π值。这是经典的Spark入门示之一。 ```scala object SparkPi { def main(args: Array[String]): Unit = { val conf = new org.apache.spark.SparkConf().setAppName("Spark Pi").setMaster("local[*]") val sc = new org.apache.spark.SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = 100000 * slices val count = sc.parallelize(1 to n, slices) .map { _ => val x = Math.random() * 2 - 1 val y = Math.random() * 2 - 1 if (x * x + y * y < 1) 1 else 0 }.reduce(_ + _) println(s"Pi is roughly ${4.0 * count / n}") sc.stop() } } ``` 此代码片段实现了通过生成随机点来估算π值的功能[^2]。 #### 示2:单词计数 以下代码展示了如何使用Spark进行单词计数操作。这是一个经典的文本处理任务。 ```scala object WordCount { def main(args: Array[String]): Unit = { val conf = new org.apache.spark.SparkConf().setAppName("Word Count").setMaster("local[*]") val sc = new org.apache.spark.SparkContext(conf) val textFile = sc.textFile("input.txt") val wordCounts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) wordCounts.foreach(println) sc.stop() } } ``` 此代码片段展示了如何从文本文件中读取数据并统计每个单词出现的次数[^3]。 #### 示3:Kafka数据流处理 以下代码展示了如何使用Spark Streaming从Kafka中读取数据并进行简单的处理。 ```scala import org.apache.spark.streaming.kafka010._ import org.apache.spark.streaming.{Seconds, StreamingContext} import org.apache.spark.SparkConf object KafkaStreamExample { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("Kafka Stream Example").setMaster("local[*]") val ssc = new StreamingContext(conf, Seconds(5)) val kafkaParams = Map[String, Object]( "bootstrap.servers" -> "localhost:9092", "key.deserializer" -> classOf[org.apache.kafka.common.serialization.StringDeserializer], "value.deserializer" -> classOf[org.apache.kafka.common.serialization.StringDeserializer], "group.id" -> "use_a_separate_group_id_for_each_stream", "auto.offset.reset" -> "latest", "enable.auto.commit" -> (false: java.lang.Boolean) ) val topics = Array("test-topic") val stream = KafkaUtils.createDirectStream[String, String]( ssc, org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent, org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe[String, String](topics, kafkaParams) ) stream.map(record => (record.key, record.value)) .foreachRDD(rdd => rdd.foreach(println)) ssc.start() ssc.awaitTermination() } } ``` 此代码片段展示了如何通过Spark Streaming从Kafka中读取数据流并进行实时处理[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值