编程语言结构,用于处理由错误代码,异常或其他语言特定方法发出的错误。
AWS 步骤函数:lambda 中的错误处理程序未将正确的数据传递到 AWS 状态机
我有状态机,它使用 lambdas,s3 复制/删除对象,传递状态,选择状态,... 简单来说,它的作用就是从“pending”文件夹中获取对象,处理它(使用 lambda)然后...
在Python 3中,我们如何捕获特定的OSError异常? 我当前的代码捕获了所有 OSError,但只需要捕获 OSError: [Errno 12]。 尝试: 富() 除了 OSError 为 e: print('抓住了
我想防止将数据插入表中,并在“OrderDate”列大于“2021-01-01”时返回“错误”。如何在 sql-server v.2019 中使用 TRIGGER 和 TRY...CATCH 来做到这一点 或者...
我正在尝试做一个硒程序,我正在尝试做一个基本的网络抓取,我可以获得网站的标题。然而,每当我尝试使用 selenium 进行最基本的网络抓取时......
我的自定义错误处理程序如何检测 PHP 是否也会以 ErrorException 形式抛出相同的错误?
我正在尝试更新较旧的应用程序以使用较新的 PHP 8.2+ 功能。许多内部 PHP 错误现在会自动作为 ErrorException 对象抛出。 您可以设置自定义函数来
在具有 YML 管道的 ADO 中、在 PowerShell 任务中、在 MSFT 托管代理上,我正在运行这些命令,以初始化包含文件的文件夹,并将其推送到 ADO 中的现有(空)存储库。 > ...
当引用的列不存在时,如何在 PHP/Laravel 中获取 SQLite 错误
与我之前的问题相关,我发现由于我犯的错误,Laravel 生成了错误的 SQL 查询: 从“公司”中选择 *,其中“公司”.“id”= '9c54...
Powershell 不会退出并显示我指定的错误代码 end keep以 1 结尾
我有 powrshell 脚本来检查 .xml 文件,如果找到 - 以 5 退出,否则以 0 退出: # 确保脚本以管理员身份运行 if (-not ([Security.Principal.WindowsPrincipal] [安全。
当我尝试合并数据时,-28115-ORA-28115:带有检查选项违规的策略,我收到此错误。怎么解决这个问题。哪个团队将处理这个错误。谢谢 我正在尝试新的数据库,
Next JS 中多个根layout.jsx上下文中的not-found.tsx页面
我希望有人能够提供帮助。 我的 NextJS 14 应用程序中有以下页面结构: 应用程序/ (行政)/ 布局.tsx (网络)/ 布局.tsx 页面.tsx 未找到.tsx 注意...
我在尝试为 DOM 编写 if 语句来检查 $html 是否为空时遇到问题。然而,每当 HTML 页面最终变成空白时,它只会删除 D 以下的所有内容...
我正在尝试处理 Laravel 11 项目中 Passport 的一些异常,但由于某种原因,我将任何可渲染异常(Passport 和其他异常)添加到我的 ->withExceptions 部分...
像这样 主页无法正确显示,类似于此处链接的屏幕截图。尽管多次尝试刷新页面、清除缓存和删除,此问题仍然存在
如何在 Unity C 测试框架中使用 TEST_PROTECT 来实现示例的行为
我创建了以下代码片段来重现 Unity C 测试框架中的错误处理机制的问题。 通过使用 TEST_PROTECT(),如 Unity C 测试框架中所述
我正在寻找一种更好的方法来处理错误和异常。 我想捕获异常并将其传递回该函数的调用者。但方法签名是 我正在寻找更好的方法来处理错误和异常。 我想捕获异常并将其传递回该函数的调用者。但方法签名是 <LoginResponseDto, ErrorResponseDto> ErrorResponseDto 是当 API 返回状态代码错误时我将返回的模型。但是,可能会引发异常,我也想将其冒泡给调用者。 我不确定我当前的实现是否可行。 处理此类事情的最佳方法是什么 override suspend fun loginUser(loginRequestModel: LoginRequestModel): APIResponse<LoginResponseDto, ErrorResponseDto> { return try { val response = httpClient .post("https://endpoint") { contentType(ContentType.Application.Json) setBody( LoginRequestDto( /* body data */ ) ) } if (response.status.value == 200) { APIResponse.OnSuccess(response.body()) } else { APIResponse.OnFailure(response.body()) } } catch (exception: Exception) { if (exception is CancellationException) { Timber.e(exception) throw exception } else { Timber.e(exception) // This works as I am still return the ErrorResponseDto but looks hacky doing it like this APIResponse.OnFailure(ErrorResponseDto( errors = listOf( ErrorDto( code = exception.localizedMessage ?: "", detail = exception.message ?: "Unknown")))) // But what I would want to do is this // APIResponse.OnFailure(exception) } } } interface APIResponse<out T, out E> { data class OnSuccess<T>(val data: T) : APIResponse<T, Nothing> data class OnFailure<E>(val error: E) : APIResponse<Nothing, E> } data class ErrorResponseDto( val errors: List<ErrorDto> ) data class ErrorDto( val code: String, val detail: String ) 如果您有构造 Success 和 Failure 实例的方法以及可以接受异常并返回 APIResponse<Nothing, ErrorResponseDto> 的重载方法,该怎么办? interface APIResponse<out T, out E> { data class Success<T>(val data: T) : APIResponse<T, Nothing> data class Failure<E>(val error: E) : APIResponse<Nothing, E> companion object { fun <T> onSuccess(data: T) = Success(data) fun <E> onFailure(error: E) = Failure(error) fun onFailure(cause: Exception): APIResponse<Nothing, ErrorResponseDto> { return Failure(ErrorResponseDto( errors = listOf( ErrorDto( code = cause.localizedMessage ?: "", detail = cause.message ?: "Unknown")))) } } } 这样,您可以使用 APIResponse.OnFailure(exception) 来简化处理 HTTP 响应的代码。 我个人将客户端设置为期望成功,然后使用封装所有错误的kotlin.Result而不是返回奇怪的类型接口。 唯一要记住的是,当 http 调用本身是失败的原因时,Ktor 会给我们 ResponseException。 override suspend fun loginUser(loginRequestModel: LoginRequestModel): Result<LoginResponseDto> = runCatching { // note that client is set up to expect success so it will throw when response code is not 200 httpClient .post("https://endpoint") { contentType(ContentType.Application.Json) setBody(LoginRequestDto(/* body data */)) }.body() }.onFailure { // bubble up cancellation if (it is CancellationException) throw it } 现在在呼叫站点中剩下的就是: api.loginUser(loginModel).fold ( onSuccess = { loginDto -> handleSuccessfullLogin(loginDto) }, onFailure = { error -> when (error) { is ResponseException -> { // http call failed here error.response.status // returned code and message is here } else -> { /* other causes */ } } } ) 注意ResponseException如何包含完整的HttpResonse,这意味着如果需要的话我们也可以尝试获取错误.body()。 我的一些偏好,基于关注点分离,这可能会给你一些关于你自己的解决方案的想法。 消费观点 视图通过指示其视图模型调用 API 来发起处理。出现错误时,消费视图可能会显示子错误视图。 “错误摘要”视图可能会显示基本消息。单击它时,您可能会看到一个错误详细信息模式对话框,它会呈现您的代码和详细信息,以及可能的其他详细信息。 消费视图模型 视图模型是捕获 API 错误并填充错误视图模型的地方。但这不是您实施管道的地方。相反,目标是只编写以业务为中心的代码,如下所示: try { val result = loginClient.loginUser(request) withContext(Dispatchers.Main) { updateData(result) } } catch (error: AppError) { withContext(Dispatchers.Main) { updateError(error) } } 服务代理模式 对于每个远程 API(例如登录服务),使用专用类与其交互,该类实现任何管道,例如从 API 错误响应转换为应用程序的错误视图模型。 可扩展性 我对前端应用程序的目标通常是使用简单的代码构建许多视图和视图模型,而管道代码(例如涉及远程调用的代码)是外部化的。我认为上述模式满足这些要求。 总结 在你的情况下,我会让你的loginUser逻辑成为服务代理方法。它的返回类型应该是LoginResponseDto。失败时,loginUser会抛出一个错误,这对于视图模型来说很容易使用。例如,它可能会从 ErrorResponseDto 翻译为 AppError。 在大型项目中,要记住的最重要的事情是关注点分离和一般代码可读性/可维护性。您的代码大部分都很好,但您可以通过定义一个 API 错误类以及可能发生的众所周知的异常来标准化/改进它。比如: sealed class APIErrorException(message: String, cause: Throwable? = null) : Exception(message, cause) { class InvalidCredentialsException(message: String) : APIErrorException(message) class AccessDeniedException(message: String) : APIErrorException(message) class ResourceNotFoundException(message: String) : APIErrorException(message) class UnknownAPIException(message: String) : APIErrorException(message) } 然后您可以更新 APIResponse 接口并在代码中使用,如下所示: sealed interface APIResponse<out T, out E : Exception> { data class Success<T>(val data: T) : APIResponse<T, Nothing> data class Failure<E>(val error: E) : APIResponse<Nothing, E> data class Error(val exception: Exception) : APIResponse<Nothing, Nothing> } override suspend fun loginUser(loginRequestModel: LoginRequestModel): APIResponse<LoginResponseDto, Exception> { return try { val response = httpClient.post("https://endpoint") { contentType(ContentType.Application.Json) setBody(LoginRequestDto(/* body data */)) } when (response.status.value) { 200 -> APIResponse.Success(response.body()) 401 -> throw APIErrorException.InvalidCredentialsException("Invalid credentials provided") 403 -> throw APIErrorException.AccessDeniedException("Access denied") 404 -> throw APIErrorException.ResourceNotFoundException("Resource not found") else -> APIResponse.Failure(ErrorResponseDto(errors = listOf(ErrorDto("APIError", "Unknown error")))) } } catch (e: CancellationException) { Timber.e(e) //Maybe rethrow ? } catch (e: Exception) { Timber.e(e) APIResponse.Error(e) } }
我想捕获 golang 中的“绑定:地址已在使用中”错误。 conn, err := net.ListenUDP("udp", addr) 如果错误!= nil { 如果 CATCH_BIND_ERROR(错误) { // 如果 'addr' 已经存在,则执行某些操作...
一直在尝试编写一个函数来做到这一点。 fn main() -> 结果 { 让 clargs: Vec = env::args().collect(); // 验证命令行参数 如果...
我的 Chrome 页面控制台中出现了 24 个错误,Sentry 仅记录了一个。 我已遵循文档并确保 Sentry 在 o...
我已经开始使用 Elm,并希望在搜索植物时从 Trefle API 获取图像,但我不断收到“无法获取图像”错误。 我确实使用自己的访问令牌,但我更换了它...