python - 为什么这段代码没有异常抛出?
天蓬老师
天蓬老师 2017-04-18 10:28:05
0
2
506
In [8]: def bar():
   ...:     a = 10
   ...:     try:
   ...:         raise
   ...:     except:
   ...:         try:
   ...:             raise
   ...:         except:
   ...:             raise
   ...:     finally:
   ...:         return a


In [9]: bar()
Out[9]: 10
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

membalas semua(2)
Peter_Zhu

Ini agak menarik, mari jalankan beberapa kod dahulu

1. Kod ini bermakna anda tidak perlu risau tentang berapa banyak lapisan percubaan. Sebenarnya, anda hanya perlu memikirkan sebab pengecualian tidak diletakkan di bawah kecuali
def bar():
    a = 10
    try:
        print 1
        raise
    except:
        print 2
        raise
    finally:
        print 3
        return a

bar()
# 打印(没有抛出异常): 
# 2
# 3
2. Kod ini bermakna jika akhirnya mempunyai penyata pulangan, tiada pengecualian akan dilemparkan
def bar():
    a = 10
    try:
        print 1
        raise
    except:
        print 2
        raise
    finally:
        print 3
        # return a
bar()
# 打印(抛出了异常):
# 2
# Traceback (most recent call last):
# 3
#   File "/Users/xuxin/workplace/DailyScript/segmentfault/file_list_to_dict.py", line 23, in <module>
#     bar()
#   File "/Users/xuxin/workplace/DailyScript/segmentfault/file_list_to_dict.py", line 18, in bar
#     raise ValueError()
# ValueError
3 Saya menyemaknya dan melihat artikel ini untuk memahami Python akhirnya
Nampaknya selepas f() melontar pengecualian, ia melaksanakan pengembalian ke dalam kecuali, tetapi ia tidak kembali kepada pemanggil, tetapi "berterusan" dalam melaksanakan kod itu akhirnya. Pada ketika ini, saya akhirnya memahami maksud sebenar akhirnya, iaitu walaupun pemulangan telah dibuat, kod dalam akhirnya masih mesti dilaksanakan.

Kami juga boleh memahami di sini bahawa jika terdapat pernyataan yang memerlukan kaedah keluar dalam percubaan, ia akan cuba untuk melaksanakan akhirnya Jika akhirnya mempunyai kaedah kembali, ia akan kembali serta-merta dan pernyataan keluar sebelumnya tidak akan dilaksanakan.

Pada masa ini, kita boleh melihat rentetan kod ini

def bar():
    a = 10
    try:
        print 1
        raise
    finally:
        print 3
        return a

bar()
# 打印(没有抛出异常): 
# 3
4. Pada masa ini, adakah anda lebih jelas tentang akhirnya~
Belajar sekarang dan jual sekarang Jika ada sebarang kesilapan, sila tunjuk pembetulan~

左手右手慢动作

Jika pengecualian dilemparkan pada akhirnya, bukankah pernyataan kecuali anda adalah sia-sia?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan