首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能在函数外捕获错误?

在函数外捕获错误是因为错误处理应该尽可能地靠近错误发生的地方,以便更好地理解和处理错误。将错误处理放在函数外部会导致以下问题:

  1. 可读性差:将错误处理代码放在函数外部会使代码更难阅读和理解。错误处理应该与引发错误的代码紧密相关,以便在阅读代码时能够直观地了解错误处理的逻辑。
  2. 可维护性差:将错误处理代码分散在函数外部会增加代码的复杂性和维护成本。当需要修改错误处理逻辑时,需要在多个地方进行修改,容易出错并且耗费时间。
  3. 上下文丢失:将错误处理放在函数外部会导致上下文信息丢失。错误处理通常需要访问函数内部的变量和状态信息,以便更好地理解错误的原因和处理方式。如果将错误处理放在函数外部,就无法直接访问函数内部的上下文信息,增加了错误处理的难度。
  4. 代码冗余:将错误处理代码放在函数外部可能会导致代码冗余。如果多个函数都可能引发相同类型的错误,那么在每个函数外部都编写相同的错误处理代码是不必要的,会增加代码量和维护成本。

综上所述,将错误处理放在函数外部会导致可读性差、可维护性差、上下文丢失和代码冗余等问题。因此,最佳实践是在函数内部捕获和处理错误,以便更好地理解和处理错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python 为什么没有 main 函数为什么推荐写 main 函数

本期“Python 为什么”栏目来聊聊 Python 为什么没有 main 函数? 在开始正题之前,先要来回答这两个问题:所谓的 “main 函数”是指什么?...为什么有些编程语言需要强制写一个 main 函数?...但是,个人并不推荐这种写法,甚至有时候会非常反感!...每次看到这种不假思索的累赘代码,就觉得难受。为什么要写那行 if 语句呢?可能的话,应该拆分 main 函数,甚至不必封装成一个函数啊! 个人总结出以下的经验: 打破惯性思维,写出地道的代码。...小结:本文首先解释了什么是 main 入口函数,以及为什么某些语言会强制要求写 main 函数;接着,解释了为什么 Python 不需要写 main 函数;最后则是针对某些人存在的惯性误区,分享了个人的四点编程经验

2.4K31

特别篇之 为什么建议你直接使用UIImage传值?--从一个诡异的相册九图连读崩溃bug谈起

关于"番特别篇" 所谓"番特别篇",就是系列文章更新期间内,随机插入的一篇文章.目前正在更新的系列文章是 实现iOS图片等资源文件的热更新化.但是,这两天,被一个自己App中诡异的相册读取的Bug...它是9张1.5M的图,就用9张3M的图,也是OK的呀!选取时,顺序有问题?试着按照录屏中演示的顺序去选取图片,也是OK的.一股深深地无力感!竟然连复现都无法复现不了!...可能运气比较好些吧,研究UIImage的渲染机制,想想都头疼,抱着试一试的态度,google了下: PHImageManager requestImageForAsset memory high,然后第一条链接的第二个回答就是要到答案...resultHandler: 替换 requestImageForAsset:targetSize:contentMode:options:resultHandler: 就可以了,前者是直接返回二进制数据,渲染...衍生问题应用与解决 故事,真的还没有完结.从相册顺利读取这张诡异的高像素图后,发现没有办法将它上传,也无法在轮播图上,连续显示.简要概括如下.

1.7K70
  • Exception 和 Error 有什么区别么声明提问正文

    正文 对于这个问题,感觉讲不了很多,顶多都是一些概念性回答而已。 Exception Exception 是程序正常运行时,可以预料到的意外情况,可以被捕获,也应该进行相应异常处理。...以上,基本就是对于该讲问题所能想到的最大限度的点了。...解决时,如果可以,尽量不要简单的加个非空判断,在程序中各个地方加非空判断,其实是种特别优雅的行为。如果能明确为什么会出现为空的场景,如何解决,这是最好的,而不是每次都简单的加个非空判断。...OutOfMemoryError 内存溢出错误,这类问题属于 Error,不属于 Exception,所以不要期待解决这类问题仅仅通过捕获就可以处理。...另外,我们也要保证程序不会捕获到我们希望捕获的异常。比如,你可能更希望 RuntimeException 被扩散出来,而不是被捕获

    78550

    Python 工匠: 异常处理的三个好习惯

    继续阅读前,希望你已经了解了下面这些知识点:异常的基本语法与用法(建议阅读官方文档 “Errors and Exceptions”)为什么要使用异常代替错误返回(建议阅读《让函数返回结果的技巧》)为什么在写...你会发现在编写函数时,犯了一个小错误把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...为了偷懒,函数直接抛出 APIErrorCode 异常来完成了错误处理工作。再来说当时的问题。...但这时不对劲的事情出现了,如果想复用该函数,那么:必须去捕获一个名为 INVALID_IMAGE_UPLOADED 的异常哪怕的图片根本就不是来自于用户上传必须引入 APIErrorCode 异常类作为依赖来捕获异常哪怕的脚本和...让我们看一段例子:图片这是一个处理用户上传头像的视图函数。这个函数内做了三件事情,并且针对每件事都做了异常捕获。如果做某件事时发生了异常,就返回对用户友好的错误到前端。

    70810

    实现Promise,有手就行巨详细,不看血亏

    里的同步代码 * 是promise的同步代码 * 定时器1s * 是promise里的异步代码 * 是promise里的异步代码执行完成 */ setTimeout(function (...原生Promise的捕获错误 原生Promise在遇到错误有两种可能 executor函数里面的代码有错误,但是没有被then的reject捕获,会修改Promise的状态为rejected,并抛出错误...,也捕获不到错误,会报错 // executor函数里面的代码有错误,但是没有被then的reject捕获,会修改Promise的状态为reject,并抛出错误 var p = new Promise(...需要修改两处,此处虽然修改的内容不多,但是其中的逻辑非常nice,看的实现Promise视频都没有怎么在意这个捕获错误,但是自己想了许久,得出下面的代码,这样实现的_Promise就和原生的Promise...再判断抛抛出错误 // 步骤: // 1,捕获错误,存到exception; // 2,遇到定时器宏任务,把定时器的回调放进宏任务队列,等待函数执行栈全部执行完再执行

    67110

    Python 工匠: 异常处理的三个好习惯

    继续阅读前,希望你已经了解了下面这些知识点: 1.异常的基本语法与用法 2.为什么要使用异常代替错误返回 3.为什么在写 Python 时鼓励使用异常 只做精准的异常捕获 假如你不够了解异常机制,就难免会对它有一种天然恐惧感...你会发现在编写函数时,犯了一个小错误把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...为了偷懒,函数直接抛出 APIErrorCode 异常来完成了错误处理工作。 再来说当时的问题。...但这时不对劲的事情出现了,如果想复用该函数,那么: 1.必须去捕获一个名为 INVALID_IMAGE_UPLOADED 的异常,哪怕的图片根本就不是来自于用户上传。...这个函数内做了三件事情,并且针对每件事都做了异常捕获。如果做某件事时发生了异常,就返回对用户友好的错误到前端。 这样的处理流程纵然合理,但是显然代码里的异常处理逻辑有点“喧宾夺主”了。

    74540

    Python 工匠:异常处理的三个好习惯

    继续阅读前,希望你已经了解了下面这些知识点: 异常的基本语法与用法(建议阅读官方文档 “Errors and Exceptions”) 为什么要使用异常代替错误返回(建议阅读《让函数返回结果的技巧》)...你会发现在编写函数时,犯了一个小错误把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'(obj.group(1))。...为了偷懒,函数直接抛出APIErrorCode异常来完成了错误处理工作。 再来说当时的问题。...但这时不对劲的事情出现了,如果想复用该函数,那么: 必须去捕获一个名为 INVALID_IMAGE_UPLOADED 的异常 哪怕的图片根本就不是来自于用户上传 必须引入 APIErrorCode...这个函数内做了三件事情,并且针对每件事都做了异常捕获。如果做某件事时发生了异常,就返回对用户友好的错误到前端。 这样的处理流程纵然合理,但是显然代码里的异常处理逻辑有点“喧宾夺主”了。

    60440

    Python 工匠: 异常处理的三个好习惯

    继续阅读前,希望你已经了解了下面这些知识点: 异常的基本语法与用法(建议阅读官方文档 “Errors and Exceptions”) 为什么要使用异常代替错误返回(建议阅读《让函数返回结果的技巧》)...你会发现在编写函数时,犯了一个小错误把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...为了偷懒,函数直接抛出 APIErrorCode 异常来完成了错误处理工作。 再来说当时的问题。...但这时不对劲的事情出现了,如果想复用该函数,那么: 必须去捕获一个名为 INVALID_IMAGE_UPLOADED 的异常 哪怕的图片根本就不是来自于用户上传 必须引入 APIErrorCode...这个函数内做了三件事情,并且针对每件事都做了异常捕获。如果做某件事时发生了异常,就返回对用户友好的错误到前端。 这样的处理流程纵然合理,但是显然代码里的异常处理逻辑有点“喧宾夺主”了。

    90030

    三个好习惯,帮你写好Python里的异常处理

    继续阅读前,希望你已经了解了下面这些知识点: 异常的基本语法与用法(建议阅读官方文档 “Errors and Exceptions”) 为什么要使用异常代替错误返回(建议阅读《让函数返回结果的技巧》)...你会发现在编写函数时,犯了一个小错误把获取正则匹配串的方法错打成了 obj.grop(1),少了一个 'u'( obj.group(1))。...为了偷懒,函数直接抛出 APIErrorCode 异常来完成了错误处理工作。 再来说当时的问题。...但这时不对劲的事情出现了,如果想复用该函数,那么: 必须去捕获一个名为 INVALID_IMAGE_UPLOADED 的异常 哪怕的图片根本就不是来自于用户上传 必须引入 APIErrorCode...这个函数内做了三件事情,并且针对每件事都做了异常捕获。如果做某件事时发生了异常,就返回对用户友好的错误到前端。 这样的处理流程纵然合理,但是显然代码里的异常处理逻辑有点“喧宾夺主”了。

    1.2K20

    Python|tryexcept捕捉SyntaxError

    同样的错误还有IndentationError(缩进错误)…… 既然SyntaxError出现在运行前,为什么今天的标题是Python|try/except捕捉SyntaxError呢?...要想让它在运行时出现,必须首先介绍两个函数——exec和eval。 exec和eval exec和eval到底是何方神圣,直接使用help来进行查看了,首先是exec,如图所示。 ?...当字符串代码出现SyntaxError 下面直接验证一下当字符串代码出现SyntaxError时能不能捕获,如图所示。 ? 运行结果如图所示。 ?...从运行结果中可以看出,SyntaxError被捕获了,程序并没有崩溃。为什么会这样?...我们先分析一下程序的执行过程:首先检查语法和缩进有没有问题,然后开始执行程序,try里面调用exec这个函数,在这个函数的执行过程中,解释器发现了问题,此时except捕获了这个问题。

    1.9K10

    javascrip基础:var,let和const区别在哪里

    虽然小编主要工作时后端框架搭建,但空闲时候也经常捣鼓前端的东西,下面就分享一下入门基础知识,老鸟略过,废话也不多话,上代码之前先上概念,先理论后再实践是一贯的学习之道。...在函数声明的JavaScript变量,其作用范围是全局。...function myFun() { let a =10; let a =20; // 抛出语法错误 console.log(a); } 错误信息:"未捕获的异常:标识符'a'已经被声明过。"...当使用内部函数时,let语句让你的代码更整洁。 上面的例子应该能好好的帮你理解var和 let的区别了吧。 最后再说const const语言中的变量只能被赋值一次,然后就不能在被赋值。...; } 当我们尝试给已有的const变量赋值时,这段代码会抛出一个错误:"未捕获的类型错误:给const变量赋值"。

    85900

    Java:详解Java中的异常(Error与Exception)

    这些错误是不可查的,因为它们在应用程序的控制和处理能力之 ,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。...,也可以处理。...程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。...异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。...为什么要创建自己的异常? 答:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。 2. 应该在声明方法抛出异常还是在方法中捕获异常?

    2K10

    【C++】异常+智能指针+特殊类和类型转换

    异常是C++引入的处理错误的一种方式,当一个函数或者接口在发生错误时,可以直接throw异常对象,然后catch会捕获异常对象,对发生的异常作相关的处理。...C++98中,搞出了一个异常规格,即为在函数后面加throw(类型),表示这个函数抛出的异常类型都有哪些,如果括号中为空,表示该函数抛出任何异常。...下面是异常的优缺点,虽然异常也有不少的缺点,但总体来说利大于弊,并且相比传统的处理错误的方式已经优化了很多,所以还是很鼓励使用异常来处理错误的。 二、智能指针 1.为什么需要智能指针? 1....如果不封private的话,可以在类进行函数的定义,在类外调用拷贝构造。...delete,表示该成员函数被禁掉,编译器会删除这样的类成员函数,此时无论类内还是类都无法调用到已经被删除的成员函数

    42340

    一次Rust重写基础软件的实践(三)

    除零 的错误不会在 Rust 中发生,而是想说明 Rust 语言本身是尽可能在编译阶段就帮助工程师找出代码错误,使其代码更健壮可靠。...有读者可能会问:既然 Rust 定义了 Unrecoverable Errors, 那就是不可恢复的错误为什么还固执的需要处理这种错误呢?回答这个问题还是需要结合的场景来讨论。...之所以说是“十分坚定”是因为 Rust 在 std::panic::catch_unwind [6] 中给我解决这个问题留下了一定的空间。...通过访问从 0 到 3 的元素索引固定长度为 3 的数组来引发 out of index range panic 错误 对于处理 panic 错误的样本代码如下: use std::io; use std...如文档中所说:它并不能捕获所有的 panic 错误,该函数捕获展开式 panic,而不捕获终止进程的情况。

    17010

    深入研究Block捕获外部变量和__block实现原理

    一般可以分为一下5种: 自动变量 函数参数 静态变量 静态全局变量 全局变量 研究Block的捕获外部变量就要除去函数参数这一项,下面一一根据这4种变量类型的捕获情况进行分析。...2.为什么自动变量的值没有增加,而其他几个变量的值是增加的?自动变量是什么状态下被block捕获进去的? 为了弄清楚这2点,我们用clang转换一下源码出来分析分析。...所以在ARC环境下,3种类型都可以捕获外部变量。 2.从持有对象的角度上来看: _NSConcreteStackBlock是持有对象的。...3.Block obj = 1复制代码 _NSConcreteGlobalBlock也持有对象 //以下是在MRC下执行的 void (^myBlock)(void) = ^{...捕获进Block的对象会被Block持有。 自动变量的值,被copy进了Block,不带__block的自动变量只能在里面被访问,并不能改变值。 ?

    1.2K30

    真实工作中的编程,与在校coder有哪些不同?

    而学校里的编程更像是设计图纸搭局部模型,今天做个浴室、明天做个厕所,而且用料标准也固定,没法形成建筑。 因为是做数据分析的。...这是在企业数据开发中需要严格遵守的,可能在学校里写个SQL并不会考虑这么多。 除了开发流程规范的差异,编程本身也有很大不同,就是刚刚提到的代码规范。...函数对决不能超过 80 行,超过,一定要思考怎么拆函数,思考函数分组,层次。工程思维,就在于拆文件的时候积累。 代码嵌套层次不能超过 4 层,超过了就得改。多想想能不能 early return。...永远不要使用 except: 语句来捕获所有异常, 也不要捕获 Exception 或者 StandardError , 除非你打算重新触发该异常, 或者你已经在当前线程的最外层(记得还是要打印一条错误消息...在异常这方面, Python非常宽容, except: 真的会捕获包括Python语法错误在内的任何错误. 使用 except: 很容易隐藏真正的bug.

    44620

    AbstractMethodError那些事

    大家好,又见面了,是你们的朋友全栈君。...发生原因 为什么会发生这样的错误? 让我们看一下官方的解释: 当应用程序尝试调用抽象方法时抛出。...通常,该错误被编译器捕获; 如果某些类的定义自上次编译当前执行的方法以来兼容地更改,则此错误能在运行时发生。...通常,该错误被编译器捕获; 如果某些类的定义自上次编译当前执行的方法以来兼容地更改,则此错误能在运行时发生。...理解: 该错误被编译器捕获: 现在的开发工作已经都转向了各种开发工具,这样的错误应该不会发生,大佬们使用记事本写代码 时,很有可能发生 如果某些类的定义自上次编译当前执行的方法以来兼容地更改

    90510

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券