我試圖在例外內部引發例外,而沒有收到外部例外和回溯的錯誤訊息,只列印嘿。但是,如果我放了一個字串而不是 k 或 m,我就會被困在這里。有任何想法嗎?
輸出,我不需要回溯
def division(k, m):
try:
k / m
except TypeError:
raise ValueError ('hey') from None
return k / m
uj5u.com熱心網友回復:
我不完全確定您要在這里實作什么,但是為什么不在引發 TypeError 時只列印字串“hey”?像這樣:
def division(k, m):
try:
k / m
except TypeError:
print("hey")
return None
return k / m
如果您出于任何原因需要引發 ValueError ,那么您可以在呼叫該方法的地方捕獲 ValueError ,我想:
def division(k, m):
try:
k / m
except TypeError:
raise ValueError
return k / m
try:
division("not_an_int", "could_be_an_int")
except ValueError:
print("hey")
uj5u.com熱心網友回復:
據我了解,您需要自定義訊息格式的自定義例外。
class CustomException(Exception):
def __init__(self, message):
self.message = message # You can also set it by default so you don't need to input any message
super().__init__(self.message)
def __eq__(self, other):
return self.message == other.message
def __str__(self):
return f'{self.message}' # In your case, just to display message.
# return f'Error message: {self.message}'
def division(k, m):
try:
k / m
except TypeError:
raise CustomException(message="hey")
return k / m
try:
division("not_an_int", "could_be_an_int")
except ValueError as e:
print(e)
uj5u.com熱心網友回復:
您在這里嘗試實作的目標并不完全清楚。您不會收到錯誤訊息,因為您引發了例外,而是因為您沒有再次捕獲它。如果您不想要錯誤訊息,則需要捕獲例外。然后,如果您只想列印訊息“嘿”,您可以從例外引數中獲取它。
try:
division('a', 2)
except ValueError as e:
print(e.args[0])
在raise ... from None已經擺脫了第一個例外的,所以你只看到ValueError你在提升except塊division,但如果例外使得它所有的出路在命令列中,你必須以某種方式通知,和Python將這樣做的列印錯誤資訊。
現在,您可以根據需要更改未捕獲例外的默認行為。例如,這將為args[0]您未明確捕獲的所有例外列印。
import sys
def handle_exception(exc_type, exc_value, exc_traceback):
print('handler:', exc_value.args[0])
sys.excepthook = handle_exception
這sys.excepthook是 Python 將呼叫的一個未捕獲例外的函式。所以如果你這樣做
try:
division('a', 2)
except ValueError as e:
print('caught:', e)
division('a', 2) # not caught
第一個除法例外被捕獲,并且不呼叫處理程式,第二個沒有被捕獲并使用處理程式(并且只會列印訊息“嘿”)。
不過,改變所有未捕獲例外的處理方式并不是一個好主意。您可能只想處理自己的行為,而將默認行為用于其他任何事情。
但是,正如我所說,我并不完全清楚您要實作的目標,因此上述所有內容可能與問題完全無關。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362406.html
