草庐IT

exception-derived

全部标签

python - 如何在嵌套的 try/except block 中重新引发异常?

我知道,如果我想重新引发异常,我只需在相应的exceptblock中使用不带参数的raise即可。但是给定一个像这样的嵌套表达式try:something()exceptSomeErrorase:try:plan_B()exceptAlsoFailsError:raisee#I'dliketoraisetheSomeErrorasifplan_B()#didn'traisetheAlsoFailsError如何在不破坏堆栈跟踪的情况下重新引发SomeError?在这种情况下,单独的raise会重新引发更新的AlsoFailsError。或者我怎样才能重构我的代码来避免这个问题?

python - hasattr() 与 try-except block 处理不存在的属性

ifhasattr(obj,'attribute'):#dosomthing对try:#accessobj.attributeexceptAttributeError,e:#dealwithAttributeError应该首选哪个以及为什么? 最佳答案 有没有可以说明性能差异的长凳?是你的friend了$python-mtimeit-s'classC(object):a=4c=C()''hasattr(c,"nonexistent")'1000000loops,bestof3:1.87usecperloop$python-mtime

python - `if key in dict` 与 `try/except` - 哪个更易读?

我有一个关于习语和可读性的问题,对于这种特殊情况,Python哲学似乎存在冲突:我想从字典B构建字典A。如果B中不存在特定键,则什么都不做并继续。哪种方式更好?try:A["blah"]=B["blah"]exceptKeyError:pass或if"blah"inB:A["blah"]=B["blah"]“做事并请求原谅”与“简单明了”。哪个更好,为什么? 最佳答案 异常(exception)不是条件。条件版本更清晰。这很自然:这是直接的流控制,这是为条件设计的,而不是异常(exception)。异常版本主要用作在循环中进行这些查

python - 使用带有 try-except block 的 python "with"语句

这是将python“with”语句与try-exceptblock结合使用的正确方法吗?:try:withopen("file","r")asf:line=f.readline()exceptIOError:如果是,那么考虑旧的做事方式:try:f=open("file","r")line=f.readline()exceptIOError:finally:f.close()这里的“with”语句的主要好处是我们可以摆脱三行代码吗?这个用例对我来说似乎没有什么吸引力(尽管我知道“with”语句还有其他用途)。编辑:以上两段代码的功能是否相同?EDIT2:前几个答案一般都在谈论使用“wi

python - 在 Python 中捕获键盘中断而不使用 try-except

在Python中有什么方法可以捕获KeyboardInterrupt事件而不将所有代码放在try-except语句中?如果用户按下Ctrl+C,我想干净利落地退出。 最佳答案 是的,您可以使用模块signal安装中断处理程序,并使用threading.Event永远等待:importsignalimportsysimporttimeimportthreadingdefsignal_handler(signal,frame):print('YoupressedCtrl+C!')sys.exit(0)signal.signal(sign

java - Collections.sort() throws 比较方法违反了它的一般约定!异常(exception)

我正在尝试对List对象进行排序,但抛出了此异常(但仅适用于大型列表)排序代码:ListsentenceList=finalRepresentation.getSentences();Collections.sort(sentenceList);//FinalSentence类头:publicclassFinalSentenceimplementsComparable{...}compareTo()实现:@OverridepublicintcompareTo(FinalSentenceo){if(this==o){return0;}if(this.score>o.score){retu

Java SneakyThrow of exceptions,类型删除

谁能解释一下这段代码?publicclassSneakyThrow{publicstaticvoidsneakyThrow(Throwableex){SneakyThrow.sneakyThrowInner(ex);}privatestaticTsneakyThrowInner(Throwableex)throwsT{throw(T)ex;}publicstaticvoidmain(String[]args){SneakyThrow.sneakyThrow(newException());}}这可能看起来很奇怪,但这不会产生强制转换异常,并且允许抛出已检查的异常而无需在签名中声明它,或

java - Exceptions 有多昂贵

这个问题在这里已经有了答案:WhataretheeffectsofexceptionsonperformanceinJava?(18个回答)关闭9年前。你知道在java中抛出和处理异常是多么昂贵吗?我们就团队中异常的实际成本进行了多次讨论。有些人尽可能地避免它们,有些人说使用异常对性能的损失被高估了。今天我在我们的软件中发现了如下一段代码:privatevoiddoSomething(){try{doSomethingElse();}catch(DidNotWorkExceptione){log("AMessage");}goOn();}privatevoiddoSomethingEl

java - 打印异常与 Exception.getMessage

关于异常使用以下两段代码是否有最佳实践。//code1}catch(SomeExceptione){logger.error("Noinstanceavailable!",e.getMessage());}//code2}catch(SomeExceptione){logger.error("Noinstanceavailable!",e);}什么时候应该使用异常的getMessage方法? 最佳答案 第一个无法编译,因为方法error接受String作为第一个参数,接受Throwable作为第二个参数。e.getMessage()

java - throws x extends Exception 方法签名

阅读Optional的JavaDoc,我碰到了一个奇怪的方法签名;我这辈子都没见过:publicTorElseThrow(SupplierexceptionSupplier)throwsXextendsThrowable乍一看,我想知道通用异常甚至是可能的,因为你不能这样做(here和here)。再想一想,这开始有意义了,因为这里只是为了绑定(bind)Supplier...但在泛型之前,供应商本身就知道它应该是什么类型。但第二行打动了我:throwsX是一个完整的通用异常类型。然后:XextendsThrowable,this到底是什么意思?X已绑定(bind)在方法签名中。这会以任