Apa perbedaan antara ',' dan 'sebagai' dalam pernyataan kecuali, misalnya:
try:
pass
except Exception, exception:
pass
dan:
try:
pass
except Exception as exception:
pass
Apakah sintaks kedua legal di 2.6? Ia bekerja di CPython 2.6 pada Windows tetapi interpreter 2.5 di cygwin mengeluh bahwa itu tidak valid.
Jika keduanya valid dalam 2.6 yang mana yang harus saya gunakan?
python
python-2.6
Peter Graham
sumber
sumber
as
adalah satu-satunya cara untuk menetapkan pengecualian ke lokal di Python 3.x. Tetapias
tidak diperlukan , karena Anda tidak harus menentukannya jika Anda tidak membutuhkannya sama sekali.Ya itu legal. Saya menjalankan Python 2.6
Pembaruan : Ada alasan lain untuk menggunakan
as
sintaks. Menggunakan,
membuat banyak hal menjadi lebih ambigu, seperti yang ditunjukkan orang lain; dan inilah yang membuat perbedaan. Pada Python 2.6, adamulticatch
yang memungkinkan Anda untuk menangkap beberapa pengecualian dalam satuexcept
blok . Dalam situasi seperti itu, lebih ekspresif dan pythonic untuk dikatakandaripada mengatakan
yang masih akan bekerja
sumber
except NameError, ValueError:
kemudian bertanya-tanya mengapaValueError
pengecualian itu tidak pernah ditangkap. Atau digunakanexcept (NameError, e):
dan ditinggalkanNameError
untuk'e'
!sintaks "as" adalah yang lebih disukai untuk maju, namun jika kode Anda perlu bekerja dengan versi Python yang lebih lama (2.6 adalah yang pertama untuk mendukung yang baru) maka Anda harus menggunakan sintaks koma.
sumber
Jika Anda ingin mendukung semua versi python, Anda dapat menggunakan
sys.exc_info()
fungsi seperti ini:(sumber: http://python3porting.com/noconv.html )
sumber
as
target (bersama dengan sisa info pengecualian) secara implisitdel
diedit segera setelah Anda keluar dariexcept
blok (ini mencegah beberapa referensi siklik yang terlibat dalam traceback yang disimpan dari menunda pelepasan memori sampai siklik GC berkeliling untuk menjalankan ). Jadi kode yang setara ini sedikit kurang setara, kecuali jika Anda menggunakantry/finally
di dalamexcept
blok untuk memastikandel e
dilakukan sebelum keluar dariexcept
blok.Pada Python 3.7 (tidak yakin tentang versi lain) sintaks 'koma' tidak didukung lagi:
File sumber
exception_comma.py
:$ python --version --> Python 2.7.10
$ python3 --version --> Python 3.7.2
sumber