我有一個自定義例外類:
class MyException(Exception):
pass
我呼叫它如下:
class over():
def check():
col1 = 'ageminusone'
col2 = 'Age'
col3 = 'Flag'
data = [['tom', 10], ['nick', 15], ['juli', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df[col1] = df.loc[0,col2] - 1
books = ['romance', 'fiction']
try:
regex_pattern = re.compile(r'fiction')
for book in books:
match_object = re.search(regex_pattern, booke)
print(match_object)
except MyException:
print("There was an error")
raise MyException
a = over.check()
print(a)
我只得到日志中的回溯錯誤,而不是自定義訊息“出現錯誤”,如下所示:
Traceback (most recent call last):
File "compare.py", line 53, in <module>
a = over.check()
File "compare.py", line 41, in check
match_object = re.search(regex_pattern, booke)
NameError: name 'booke' is not defined
如何修改此代碼以在實際回溯之前列印“有錯誤”?
注意:要求不要使用通用的“例外”,例如:
try:
yada yada
except Exception as err:
...
我必須使用 MyException。
uj5u.com熱心網友回復:
試試這個代碼:
class MyException(Exception): """ 捕獲 MyClass """ 引發的例外
def __init__(self, message):
self.message = message
def __str__(self):
return self.message
類結束():
def check(self):
col1 = 'ageminusone'
col2 = 'Age'
col3 = 'Flag'
data = [['tom', 10], ['nick', 15], ['juli', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df[col1] = df.loc[0,col2] - 1
books = ['romance', 'fiction']
try:
regex_pattern = re.compile(r'fiction')
for book in books:
match_object = re.search(regex_pattern, booke)
print(match_object)
except Exception as err:
print("There was an error")
raise MyException("There was an error")
obj = over()
obj.check()
輸出 ::
有一個錯誤 Traceback(最近一次呼叫):檔案“C:\Users\jthakkar\Downloads\sp\Task\StackOverflow1.py”,第 31 行,檢查 match_object = re.search(regex_pattern, booke) NameError: name 'booke' 未定義
在處理上述例外的程序中,又出現了一個例外:
回溯(最后一次呼叫):檔案“C:\Users\jthakkar\Downloads\sp\Task\StackOverflow1.py”,第 40 行,在 obj.check() 檔案“C:\Users\jthakkar\Downloads\sp\ Task\StackOverflow1.py",第 37 行,檢查 raise MyException("There was an error") main .MyException: There was an error
uj5u.com熱心網友回復:
您應該使用except NameError而不是except MyException,因為未定義的變數會導致 aNameError被引發。
為了澄清,這:
except MyException:
應該
except NameError:
這輸出:
There was an error
Traceback (most recent call last):
File "<string>", line 11, in check
NameError: name 'books' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 21, in <module>
File "<string>", line 17, in check
__main__.MyException
uj5u.com熱心網友回復:
我能夠通過如下增強自定義例外類來達到預期的結果(根據接受的答案建議):
class MyException(Exception):
def __init__(self, message):
self.message = message
def __str__(self):
return self.message
然后在 except 陳述句中完全省略額外的呼叫,如下所示:
class over():
def check():
col1 = 'ageminusone'
col2 = 'Age'
col3 = 'Flag'
data = [['tom', 10], ['nick', 15], ['juli', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])
df[col1] = df.loc[0,col2] - 1
books = ['romance', 'fiction']
try:
regex_pattern = re.compile(r'fiction')
for book in books:
match_object = re.search(regex_pattern, booke)
print(match_object)
except:
raise MyException("There was an error")
a = over.check()
print(a)
這會給我一個像這樣的錯誤:
Traceback (most recent call last):
File "compare.py", line 48, in check
match_object = re.search(regex_pattern, booke)
NameError: name 'booke' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "compare.py", line 59, in <module>
a = over.check()
File "compare.py", line 52, in check
raise MyException("There was an error")
__main__.MyException: There was an error
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489160.html
