اگر یک استثنای مدیریت نشده در یک بخش except رخ دهد، استثناء مدیریت شده به آن متصل شده و در پیام خطا گنجانده میشود:
>>> try:
... open("database.sqlite")
... except OSError:
... raise RuntimeError("unable to handle error")
...
Traceback (most recent call last):
File "", line 2, in
open("database.sqlite")
~~~~~^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'database.sqlite'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 4, in
raise RuntimeError("unable to handle error")
RuntimeError: unable to handle error
برای نشان دادن اینکه یک استثناء نتیجه مستقیم دیگری است، دستور raise یک بند from اختیاری را اجازه میدهد:
# exc باید نمونه استثناء یا None باشد. raise RuntimeError from exc
این زمانی مفید است که شما استثناءها را تبدیل میکنید. به عنوان مثال:
>>> def func():
... raise ConnectionError
...
>>> try:
... func()
... except ConnectionError as exc:
... raise RuntimeError('Failed to open database') from exc
...
Traceback (most recent call last):
File "", line 2, in
func()
~~~~^^
File "", line 2, in func
raise ConnectionError
ConnectionError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "", line 4, in
raise RuntimeError('Failed to open database') from exc
RuntimeError: Failed to open database
این همچنین اجازه غیرفعال کردن خودکار زنجیره کردن استثناء را با dicho from None میدهد:
>>> try:
... open('database.sqlite')
... except OSError:
... raise RuntimeError from None
...
Traceback (most recent call last):
File "", line 4, in
raise RuntimeError from None
RuntimeError
برای اطلاعات بیشتر درباره مکانیزم زنجیره کردن، استثنای درlined-in را ببینید.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial