Dalam kode di bawah ini

>>> try:
...     a = 12 / 0
... except Exception as e:
...     print(e)
... 
division by zero
>>> 

Google mengatakan 'kata kunci as digunakan untuk membuat alias.'

Lalu mengapa kode di bawah ini tidak berfungsi?

>>> try:
...     a = 12 / 0
... except Exception:
...     print(Exception)
... 
<class 'Exception'>
>>> 

Menurut beberapa sumber itu menciptakan sebuah objek dari kelas Exception.

Lalu mengapa kode berikut tidak mencetak apa-apa?

>>> try:
...     a = 12 / 0
... except Exception:
...     a = Exception()
...     print(a)
... 

>>> 

Pertanyaan saya adalah:

  1. Jika kata kunci as bertindak sebagai alias, mengapa contoh kedua tidak berfungsi (alih-alih kesalahan pencetakan, itu mencetak referensi ke kelas Exception)?

  2. Jika kata kunci as membuat objek kelas Exception, mengapa contoh ketiga tidak berfungsi (alih-alih mencetak kesalahan, itu tidak mencetak apa pun)?

2
Noogrammer 12 Mei 2021, 08:42

1 menjawab

Jawaban Terbaik

Anda salah membaca referensi. Kata kunci as digunakan untuk membuat alias, tetapi hanya dalam pernyataan import. Artinya dengan except sama sekali berbeda. Dalam hal ini, itu hanya mendeklarasikan variabel yang akan menampung objek pengecualian. Jika Anda mengatakan except Exception as e, maka e akan menjadi objek bertipe Exception.

Dalam contoh terakhir Anda:

try:
    a = 12/0
except Exception:
    a = Exception()
    print(a)

Anda tidak menangkap pengecualian yang dilemparkan. Sebagai gantinya, Anda membuat opsi Pengecualian baru. Objek seperti itu belum memiliki pengecualian, jadi tidak ada yang dicetak. Jika Anda ingin pengecualian yang tertangkap, Anda harus menggunakan klausa as.

4
Tim Roberts 12 Mei 2021, 05:46