什么是异常? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Angdo
V2EX    问与答

什么是异常?

  •  
  •   Angdo 2015-10-23 16:12:29 +08:0 via iPhone 2849 次点击
    这是一个创建于 3642 天前的主题,其中的信息可能已经有所发展或是发生改变。

    异常是程序运行中遇到事先没有预料到的事叫异常
    还是事先定义好可能出现的意外情况?
    异常和 bug 是一样的吗?

    15 条回复    2015-10-23 21:45:26 +08:00
    cxbig
        1
    cxbig  
       2015-10-23 16:18:51 +08:00
    程序里异常是 Exception ,通常来说它是一种运行机制,可以由很多原因触发(写错代码、收到错误的反馈等),然后可以通过一定的机制去 catch 然后根据实际情况进行处理。属于比较主动的程序行为。
    bug ,算是一种设计失误。写错代码直接报错、设计的算法没有得到正确的结果、逻辑错误等。
    scream7
        2
    scream7  
    PRO
       2015-10-23 16:31:07 +08:00
    关注中,我对这个也一直有点不了解.
    如果我们能预料到 exception,并 catch 住,为什么不直接使用 if 判断,assert 呢?
    watzds
        3
    watzds  
       2015-10-23 16:42:26 +08:00 via Android
    异常是难以避免的,可能出现的异常情况
    我想它还有一些跳转的功能,向上层抛出等

    有些底层就是通过 if else 抛出异常吧
    不用异常, ifelse 写起来会很多吧

    Java 里的检查异常,还能强制你去关注可能出现的异常情况,你通过返回值,或者全局变量,就没法实现
    caoyue
        4
    caoyue  
       2015-10-23 16:58:15 +08:00
    我的理解:
    异常是遇到无法处理的情况
    举个例子,比如定义返回类型是 int
    操作是 a/b ,这时传进来一个 b=0
    你要怎么返回?
    只能抛出异常了
    Angdo
        5
    Angdo  
    OP
       2015-10-23 19:18:04 +08:00 via iPhone
    @cxbig bug 不能看成是在一个特定情况下发生的程序异常?
    Troevil
        6
    Troevil  
       2015-10-23 19:20:05 +08:00
    异常可以理解为可预料到的 BUG ,
    Angdo
        7
    Angdo  
    OP
       2015-10-23 19:21:23 +08:00 via iPhone
    @scream7 我的感觉是既然用 exception 那么肯定是一个在其子类定义的异常情况,那么就应该算是事先预料到的可能情况,没有预料到的还能是异常?
    Angdo
        8
    Angdo  
    OP
       2015-10-23 19:23:17 +08:00 via iPhone
    @watzds 重点是可以预料的意外情况是异常还是无法预料的是异常
    Angdo
        9
    Angdo  
    OP
       2015-10-23 19:26:09 +08:00 via iPhone
    @Troevil BUG 不算是一种程序异常?
    Angdo
        10
    Angdo  
    OP
       2015-10-23 19:35:12 +08:00 via iPhone
    @caoyue 重点是可以预料到发生的是异常还是无法预料的是异常
    cxbig
        11
    cxbig  
       2015-10-23 20:04:51 +08:00   1
    @Angdo
    Bug 通常形容意料之外的错误、或导致程序中断。 Exception 通常来说是准备好的问题处理机制。
    当然,在 OOP 环境里,某个环节没有加入 Exception 的处理,导致程序中断。我们就认为是一个 Bug 。
    watzds
        12
    watzds  
       2015-10-23 20:30:31 +08:00 via Android
    “异常”就是处理异常情况的一种机制,分什么可预料不可预料。异常情况出现的时机不可预料,异常情况是否出现最终都是可判断的。你说什么不可预料,举个例子
    Angdo
        13
    Angdo  
    OP
       2015-10-23 20:45:27 +08:00 via iPhone
    @watzds 就是知道程序可能会发生一种预料到的情况,和可能发生一种没有想过的情况
    learnshare
        14
    learnshare  
       2015-10-23 21:26:13 +08:00   1
    异常就是知道会发生的错误,预先做好处理方案; Bug 就是没考虑到的错误
    watzds
        15
    watzds  
       2015-10-23 21:45:26 +08:00 via Android
    @Angdo 哦,你没想到的情况,没处理,没想周全,那就是逻辑错误啊
    这就是可避免的,而异常是不可避免的,总有出现的可能。比如网络不通,就可以算异常,你没法儿避免,总有不通的情况。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     883 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 19:17 PVG 03:17 LAX 12:17 JFK 15:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86