Rumah  >  Soal Jawab  >  teks badan

python - Bagaimana untuk mendapatkan nilai dalam timbunan apabila pengecualian berlaku

Andaikan terdapat sekeping kod seperti ini:

try:
    a = 1
    b = 0
    c = a / b
except Exception as e:
    print(e)

Sekarang saya ingin mendapatkan nilai setiap pembolehubah sebelum pengecualian berlaku apabila pengecualian berlaku, iaitu, dapatkan keputusan seperti a=1, b=0.

習慣沉默習慣沉默2711 hari yang lalu677

membalas semua(4)saya akan balas

  • 習慣沉默

    習慣沉默2017-05-18 11:01:04

    inspect.currentframe

    >>> import inspect
    >>> a=1;b=0;a/b
    Traceback (most recent call last):
      File "<pyshell#10>", line 1, in <module>
        a=1;b=0;a/b
    ZeropisionError: pision by zero
    >>> f=inspect.currentframe()
    >>> f.f_globals['a']
    1
    >>> f.f_globals['b']
    0
    >>> 

    balas
    0
  • PHP中文网

    PHP中文网2017-05-18 11:01:04

    Ular sawa ini tidak sepatutnya dapat melaksanakan secara aktif, kerana jika terdapat kaedah sedemikian, pengecualian berlaku semasa panggilan berbilang lapisan, dan data yang sepadan direkodkan lapisan demi lapisan dan kemudian dikembalikan, maka ini mungkin menyebabkan masalah masalah ingatan; dan sebelum pengecualian berlaku, mesin maya tidak tahu bahawa anda mempunyai masalah, sama seperti pengecualian bahagian-dengan-sifar anda di atas sedang berjalan a/b => #, dalam# Dalam pelaksanaan i_pmod kod fungsi 🎜🎜#PyIntobject, ia dinilai bahawa pembahagi ialah 0, pengecualian dicetuskan terus, dan kemudian timbunan adalah mengembalikan lapisan demi lapisan untuk memaklumkan pengguna bahawa pengecualian telah berlaku, yang turut disertakan dalam try_block Tiada kod yang berkaitan dengan nilai simbol yang direkodkan, jadi kebanyakan orang boleh membuat output yang lebih tepat dan berperikemanusiaan dalam kecuali

    balas
    0
  • 黄舟

    黄舟2017-05-18 11:01:04

    Gunakan ipython untuk membuka pdb, dan anda boleh melaporkan baris mana yang mempunyai ralat!

    ZeropisionError: integer pision or modulo by zero
    > <ipython-input-4-a5ac4c0f15ad>(4)<module>()
          1 
          2 a = 1
          3 b = 0
    ----> 4 c = a / b
    
    ipdb> 

    balas
    0
  • 为情所困

    为情所困2017-05-18 11:01:04

    pdb

    Tambah kod berikut:

    #!/usr/bin/env python
    # encoding: utf-8
    
    try:
        a = 1
        b = 0
        c = a / b
    except Exception as e:
        import pdb; pdb.set_trace()  # <-- 加入断点
        print(e)

    Laksanakan seperti berikut:

    ❯ python sf.py
    > /Users/caimaoy/tmp/sf.py(10)<module>()
    -> print(e)
    (Pdb) ll
      1     #!/usr/bin/env python
      2     # encoding: utf-8
      3
      4     try:
      5         a = 1
      6         b = 0
      7         c = a / b
      8     except Exception as e:
      9         import pdb; pdb.set_trace()
     10  ->     print(e)
    (Pdb) p a
    1
    (Pdb) p b
    0
    (Pdb)

    balas
    0
  • Batalbalas