0Pricing
Python Academy · Pelajaran

Memunculkan dan Memunculkan Ulang Pengecualian

Gunakan raise untuk menandai error dan lakukan pemunculan ulang agar error diteruskan.

Memunculkan dan Memunculkan Ulang Pengecualian adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Pendahuluan

Kata kunci raise memungkinkan Anda menandai kesalahan secara eksplisit. Memunculkan kembali pengecualian mempertahankan konteks kesalahan asli.

Memunculkan Pengecualian Bawaan

raise ValueError('message') segera memunculkan pengecualian bertipe tersebut dengan pesan yang diberikan.
def divide(a, b):
    if b == 0:
        raise ValueError('Denominator cannot be zero')
    return a / b
try:
    divide(5, 0)
except ValueError as e:
    print(e)

Memunculkan Kembali Pengecualian yang Sama

Di dalam except, raise (tanpa argumen) memunculkan kembali pengecualian saat ini dan mempertahankan pelacakan balik asli.
def process(data):
    try:
        return int(data)
    except ValueError:
        print('logging error')
        raise  # re-raises original
try:
    process('abc')
except ValueError:
    print('caller caught it')

Merantaikan Pengecualian dengan from

raise NewError('msg') from original merantaikan pengecualian. exc.__cause__ ditetapkan.
try:
    int('abc')
except ValueError as original:
    raise RuntimeError('processing failed') from original

Menekan Perantaian

raise NewError() from None memutus rantai — pengecualian asli ditekan dalam pelacakan balik.
try:
    int('abc')
except ValueError:
    raise RuntimeError('clean error') from None

Pernyataan assert

assert condition, 'message' memunculkan AssertionError jika kondisi bernilai False. Gunakan hanya untuk invarian selama pengembangan.
def sqrt(x):
    assert x >= 0, f'Input must be non-negative, got {x}'
    return x ** 0.5
try:
    sqrt(-1)
except AssertionError as e:
    print(e)

Pemunculan Bersyarat

Klausa penjaga dengan raise di bagian atas fungsi membuat prasyarat menjadi eksplisit dan menghindari penyusunan bertingkat yang dalam.
def process(items):
    if not items:
        raise ValueError('items must not be empty')
    return items[0]
print(process([1, 2, 3]))

Memunculkan Kembali vs Pengecualian Baru

Memunculkan kembali (bare raise) mempertahankan konteks. Pengecualian baru menyembunyikannya. Gunakan perantaian agar keduanya tetap terlihat.
def outer():
    try:
        inner()
    except ValueError as e:
        raise RuntimeError('outer failed') from e
def inner():
    raise ValueError('inner failed')
try:
    outer()
except RuntimeError as e:
    print(e, e.__cause__)

Pengecualian dalam finally

Memunculkan pengecualian dalam finally menggantikan pengecualian asli. Hindari memunculkan pengecualian dalam finally kecuali benar-benar diperlukan.
try:
    try:
        raise ValueError('original')
    finally:
        print('finally ran')
except ValueError as e:
    print('caught:', e)

warnings.warn vs raise

Gunakan warn() untuk kesalahan ringan yang dapat dipulihkan; gunakan raise untuk kesalahan yang harus ditangani. Keduanya memiliki tujuan yang berbeda.
import warnings
def old_func():
    warnings.warn('Deprecated', DeprecationWarning)
    return 42
print(old_func())

Pola raise from None

Saat membungkus pengecualian dari pustaka menjadi pengecualian API Anda sendiri, gunakan from None agar detail internal tidak bocor.
class DBError(Exception): pass
def query(q):
    try:
        raise ConnectionError('refused')
    except ConnectionError:
        raise DBError('query failed') from None
try:
    query('SELECT 1')
except DBError as e:
    print(e)

Pemeriksaan Singkat

Apa yang dilakukan 'raise' (tanpa argumen) di dalam blok except?

Ringkasan

raise Type('msg') menandai kesalahan. Bare raise memunculkan kembali pengecualian. raise New from Old merantaikan pengecualian. raise New from None menekan konteks. Gunakan assert untuk invarian saat pengembangan.

Lanjutkan

Kerja bagus! Lanjutkan ke pelajaran berikutnya untuk terus berkembang.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memunculkan dan Memunculkan Ulang Pengecualian” gratis?

Ya — teks lengkap “Memunculkan dan Memunculkan Ulang Pengecualian” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Memunculkan dan Memunculkan Ulang Pengecualian”?

Gunakan raise untuk menandai error dan lakukan pemunculan ulang agar error diteruskan. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Memunculkan dan Memunculkan Ulang Pengecualian” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Memahami Pengecualian
  2. try / except / else / finally
  3. Memunculkan dan Memunculkan Ulang Pengecualian
  4. Class Pengecualian Kustom
← Kembali ke Python Academy