首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >您是为特定的问题或一般的例外写例外?

您是为特定的问题或一般的例外写例外?
EN

Stack Overflow用户
提问于 2008-08-21 18:47:44
回答 11查看 1.3K关注 0票数 10

我有一些代码,给一个用户id的实用程序,然后发送电子邮件给该用户。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
emailUtil.sendEmail(userId, "foo");

public void sendEmail(String userId, String message) throws MailException {
    /* ... logic that could throw a MailException */
}

引发MailException的原因有很多,包括电子邮件地址的问题、邮件模板的问题等等。

我的问题是:是为这些异常中的每一个创建一个新的异常类型,然后单独处理它们,还是创建一个MailException,然后在异常中存储一些东西(计算机可读的东西,而不是描述文本),允许我们根据实际发生的情况做不同的事情。

编辑:作为一种澄清,异常不是针对日志的,而不是,这与代码对它们的反应有关。为了继续使用邮件示例,假设当我们发送邮件时,它可能会失败,因为您没有电子邮件地址,或者因为您没有有效的电子邮件地址,或者它可能失败。等。

我的代码希望对每一个问题都有不同的反应(主要是通过更改返回给客户端的消息,但也改变实际的逻辑)。

对于这些问题中的每一个,最好都有一个异常实现,或者一个总括的异常,它的内部(一个枚举)可以让代码区分它是什么类型的问题。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-09-26 01:55:04

我通常从一般异常开始,并根据需要对它进行子类处理。如果需要,我总是可以捕获一般异常(以及所有子类异常),但也可以捕获特定的异常。

Java的一个例子是IOException,它有像FileNotFoundException或EOFException这样的子类(还有更多的)。

这样你就可以得到两者的优势,你就没有抛出条款,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
throws SpecificException1, SpecificException2, SpecificException3 ...

将军

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
throws GeneralException

就够了。但是,如果你想对特殊的情况有特殊的反应,你总是可以抓住具体的例外。

票数 8
EN

Stack Overflow用户

发布于 2008-08-21 19:07:02

在我的代码中,我发现大多数异常都渗出到UI层,在那里它们被我的异常处理程序捕获,它只是向用户显示一条消息(并写入日志)。毕竟,这是一个意想不到的例外。

有时,我确实想捕获一个特定的异常(就像您似乎想要的那样)。然而,您可能会发现,这有点罕见,而且它指示使用异常来控制逻辑--这种逻辑效率很低(慢),而且经常被人不悦。

因此,使用您的示例,如果您希望在未配置电子邮件服务器时运行某些特殊逻辑,则可能希望向emailUtil对象添加如下方法:

公共bool isEmailConfigured()

..。首先调用它,而不是寻找特定的异常。

当异常确实发生时,这实际上意味着这种情况是完全出乎意料的,而代码无法处理它--所以最好的方法是向用户报告它(或者将它写入日志或重新启动)。

至于有异常等级和有错误代码的异常,我通常是这样做的。如果您只需要定义一个新的错误常量,而不是一个全新的类,那么添加新的异常就更容易了。但是,只要你试图在整个项目中保持一致,这就无关紧要了。

票数 10
EN

Stack Overflow用户

发布于 2008-08-21 20:46:00

@Chris.Lively

您知道,您可以在异常中传递消息,甚至可以传递“状态代码”。你在这里重新发明方向盘。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21652

复制
相关文章
s3 aws 临时授权
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/AuthUsingTempSessionToken.html
周杰伦本人
2022/10/25
1.2K0
AWS S3 学习小结
1.首先,这个是AWS的开发资源使用文档:AWS开发文档,AWS官网 – S3教程
全栈程序员站长
2022/11/03
1.8K0
AWS CPP S3访问COS
COS是完全兼容AWS S3的,项目中经常遇到客户直接使用AWS S3的相关SDK,来访问COS。
ictfox
2021/12/16
1.1K0
aws s3 java SDK使用[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179078.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
1.8K0
aws s3 java SDK使用[通俗易懂]
AWS S3 使用 travis 编译的时候提示错误 Aws::S3::Errors::PermanentRedirect
这是因为在我们的配置文件下 travis 将会把数据存储到 S3 的 us-east-2 存储区。
HoneyMoose
2020/12/22
6220
AWS S3 使用 travis 编译的时候提示错误 Aws::S3::Errors::PermanentRedirect
AWS CLI使用s3
aws CLI是什么东西,暂且先不去了解,目前的需求是s3. 我在Jenkins上创建一个bucket,然后申请access_key,然后就可以使用s3来存储数据了。也就是说,s3就是一个网盘。 1.安装CLI 文档:http://docs.aws.amazon.com/cli/latest/userguide/installing.html $ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
Ryan-Miao
2018/03/13
1.9K0
aws lambda python 上传s3
代码编写 Code writing 编写lambda函数 Write lambda functions 主要功能是查询数据库,在本地生成test.csv,而后上传至s3://test-bucket-dev桶,bthlt目录下. test.csv is generated locally and uploaded to s3://test-bucket-dev bucket,bthlt path. import pymysql import logging import boto3 from botocore
葫芦
2021/12/20
2.2K1
aws lambda python 上传s3
AWS S3 bucket 的 ACL 控制
https://www.ossez.com/t/aws-s3-bucket-acl/14175
HoneyMoose
2022/11/02
4710
What is AWS S3 and Why to use it?
AWS S3 is an object-based serverless storage service by Amazon web services which is much faster than hard drive file systems and block storage approaches to save data. Serverless means the storage is hosted on the cloud where you don’t have to configure the server with storage space restriction, it gets expanded dynamically with usage.
用户4822892
2020/01/22
6010
AWS S3 对象存储攻防
文章来源:火线Zone社区,链接:https://zone.huoxian.cn/d/907-aws-s3
火线安全
2022/03/01
3.5K0
AWS S3 对象存储攻防
AWS CloudFront CDN + S3 CORS 跨域访问的问题
在研究 https://observablehq.com/ 的载入数据的时候,我们会发现如果你数据存在 S3 上使用 CloudFront 作为 CDN 的时候,你会发现数据库载入不进去。
HoneyMoose
2020/04/21
4.7K0
AWS CloudFront CDN + S3 CORS 跨域访问的问题
基于 Apache Hudi + Presto + AWS S3 构建开放Lakehouse
数据仓库被认为是对结构化数据执行分析的标准,但它不能处理非结构化数据。包括诸如文本、图像、音频、视频和其他格式的信息。此外机器学习和人工智能在业务的各个方面变得越来越普遍,它们需要访问数据仓库之外的大量信息。
ApacheHudi
2022/12/09
1.6K0
基于 Apache Hudi + Presto + AWS S3 构建开放Lakehouse
选择文件选择文件夹
if (string.IsNullOrEmpty(folderInitialDirectory)) { folderInitialDirectory = FileAndFolderOperation.Instance.GetUserDocumentFolder(); }
全栈程序员站长
2022/09/20
1.7K0
如何使用goGetBucket扫描和发现AWS S3 Bucket
goGetBucket是一款针对AWS S3 Bucket的渗透测试与安全研究工具,在该工具的帮助下,广大研究人员可以快速扫描和发现AWS S3 Bucket。
FB客服
2023/08/08
2500
如何使用goGetBucket扫描和发现AWS S3 Bucket
AWS 上的云原生 Jenkins
我们使用 Jenkins 搭建持续交付流水线,和其他很多团队一样,这些年我们围绕 Jenkins 创建了很多工作流程和自动化。Jenkins 是我们团队取得成功的关键,让我们能够在上一季度顺利进入生产677次,搭建及部署时长平均为12分钟。
LinuxSuRen
2019/08/26
1.9K0
AWS 上的云原生 Jenkins
在AWS云上的SAP
虽然最近亚马逊在迁离Oracle的数据库,使用Aurora PostgreSQL导致Prime Day促销日出现故障,但这似乎并不影响Amazon Aurora 数据库的推进,并且亚马逊一直在说Amazon Aurora兼容MySQL和PostgreSQL,是一种将数据库迁移到云的优秀工具。可见其要脱离Oracle的决心。而SAP也做出了同样的事情,在以前的SAP ERP系统里,SAP一直使用着别人的数据库,比如Oracle,后来SAP推出了HANA内存数据库,在S/4 HANA系列版本中,成功的使用了自己研发的数据库。可以看出这两家企业都想离开Oracle,所以合作是必然的事。
matinal
2019/01/04
2.3K0
在AWS云上的SAP
aws生产实践-22:aws上创建openvpn
https://github.com/hepyu/openvpn-install/blob/master/openvpn-install.sh
千里行走
2022/02/10
1.7K0
aws生产实践-22:aws上创建openvpn
以最大速度将数据迁移至AWS S3存储
对于企业而言,数据上云“常态化”的趋势,无疑是一个巨大的技术红利。而数据规模爆发式增长的今天,移动和访问云端数据却成为困扰企业的一大难题。不过幸运的是,在对象存储方面,大部分供应商都会为企业提供一系列现成的优质工具以及用于移动和访问数据的选项。但如果企业的数据集非常大,访问时间紧要求快,或者源和目标之间的地理距离太远,那么企业可以考虑使用镭速传输。
镭速
2023/05/06
7240
PaaS 调研 : GAE 与 AWS (下)
本文介绍了PaaS云服务在实际业务中的应用,并分析了PaaS云服务的优点和缺点。作者认为PaaS云服务具有高度灵活性、可扩展性、成本效益和高效性等优点,但同时也存在一些缺点,如技术难度高、实施复杂、依赖第三方服务、需要投入较多资源等。在实际应用中,PaaS云服务需要根据业务需求和场景,选择合适的架构和技术方案,并注意维护、监控和优化云服务。
韩伟
2017/11/10
2.5K0
PaaS 调研 : GAE 与 AWS (下)
S3 存储附件和图片无法上传
我们已经在后台的控制链表中对 Key 和 Id 进行了授权,应能够正常访问没有问题的。
HoneyMoose
2020/05/22
1.6K0

相似问题

无法选择CodePipeline作为源

12

Terraform: AWS Codepipeline多个代码分解源

113

AWS CodePipeline将多个存储库作为单一源进行跟踪。

21

Github monorepo作为亚马逊CodePipeline的源

50

AWS CodePipeline不将工件上传到AWS S3

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文