Rumah > Soal Jawab > teks badan
In [8]: def bar():
...: a = 10
...: try:
...: raise
...: except:
...: try:
...: raise
...: except:
...: raise
...: finally:
...: return a
In [9]: bar()
Out[9]: 10
天蓬老师2017-04-18 10:30:05
Ini agak menarik, mari jalankan beberapa kod dahulu
def bar():
a = 10
try:
print 1
raise
except:
print 2
raise
finally:
print 3
return a
bar()
# 打印(没有抛出异常):
# 2
# 3
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
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~ringa_lee2017-04-18 10:30:05
Jika pengecualian dilemparkan pada akhirnya, bukankah pernyataan kecuali anda adalah sia-sia?