cari

Rumah  >  Soal Jawab  >  teks badan

python - 为什么这段代码没有异常抛出?

In [8]: def bar():
   ...:     a = 10
   ...:     try:
   ...:         raise
   ...:     except:
   ...:         try:
   ...:             raise
   ...:         except:
   ...:             raise
   ...:     finally:
   ...:         return a


In [9]: bar()
Out[9]: 10
天蓬老师天蓬老师2787 hari yang lalu508

membalas semua(2)saya akan balas

  • 天蓬老师

    天蓬老师2017-04-18 10:30:05

    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~

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:30:05

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

    balas
    0
  • Batalbalas