我想使用“try except”陳述句,但在兩個函式中。我在函式中發現了一個例外,但 function2 仍然存在。我怎樣才能停止它,直到出現例外
我想將它轉移到一個視窗應用程式。如果檔案沒有加載,我想顯示一個資訊視窗。我只希望程式在檔案加載時繼續運行(function2)
class Files:
def __init__(self):
self.name = "fle.txt"
def function(self):
try:
self.f = open(self.name, 'rb')
except OSError:
print("Problem!!!")
def function2(self):
print(self.f.read())
def main():
file=Files()
file.function()
file.function2()
uj5u.com熱心網友回復:
除非您真的知道如何處理它,否則不要捕獲例外。
class Files:
def __init__(self):
self.name = "fle.txt"
self.f = None
def function(self):
self.f = open(self.name, 'rb')
def function2(self):
if self.f is None:
raise Exception("File not initialized!") #Example
#return #just if you don't throw or exit
print(self.f.read())
def main():
file=Files()
try:
file.function()
except OSError:
print("Problem!!!")
else:
file.function2()
main()
uj5u.com熱心網友回復:
將您的函式呼叫包裝在更高級別的 try/except 中。
當然,你永遠不會寫這樣的東西,因為它太不靈活了。這個答案并沒有寬恕 OP 的方法,而是建議如何使它起作用。
class Files:
def __init__(self):
self.name = 'fle.txt'
def function_1(self):
self.fd = open(self.name)
def function_2(self):
print(self.fd.read())
def __del__(self):
try:
self.fd.close()
except Exception:
pass
file = Files()
try:
file.function_1()
file.function_2()
except Exception as e:
print(e)
所以我們不在類函式中進行任何例外處理(除了在 __del__ 中我們忽略任何問題),但允許所有/任何例外傳播給呼叫者。這里我們要呼叫兩個類函式,但我們將它們包裝在同一個 try/except 塊中。
如果 function_1 引發例外,則不會呼叫 function_2。
del添加以顯示如何清理,但這不是應該處理的方式
uj5u.com熱心網友回復:
@tomgalpin 是對的,您可以在出現問題后立即退出但是這是一個類,也許您想列印錯誤并且不傳回任何資料?
這是 Tom 包含的 sys exit 的一種查看方式(已注釋掉)
還要確保您是否保留代碼以關閉檔案處理程式。在沒有 .close() 的情況下對檔案呼叫 open 可能會使檔案處理程式處于打開狀態,如果您的課程在之后繼續進行,則會給您帶來問題。
class Files:
def __init__(self):
self.name = "fle.txt"
# Empty string in data if no data
self.data = ""
def function(self):
try:
#self.f = open(self.name, 'rb')
with open(self.name, 'rb') as f:
self.data = f.read()
except OSError as err:
print("Problem!!!", err)
# You could exit
# sys.exit()
# But you could also return an empty string,
# which is "falsy", regardless of what happens
finally:
return self.data
def function2(self):
print(f"Data 3 {self.data}")
def main():
file=Files()
# You could print this, or use it to get the data
print("Data 1", file.function())
data = file.function()
print(f"Data 2 {data}")
# this now also shows the data
file.function2()
uj5u.com熱心網友回復:
使用通常是但如果函式失敗則True
變為的變數False
例子
class Files:
def __init__(self):
self.name = "file.txt"
self.continue=True
self.data = ""
def function(self):
try:
#self.f = open(self.name, 'rb')
with open(self.name, 'rb') as f:
self.data = f.read()
except OSError as err:
print("Problem!!!", err)
self.continue=False
return False
finally:
return self.data
def function2(self):
if self.continue:
print(self.data)
else:
#Code if function failed
def main():
file=Files()
file.function()
file.function2()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494831.html
上一篇:為什么要呼叫RestTemplate.class的handleResponse(URIurl,HttpMethodmethod,ClientHttpResponseresponse)方法以獲得200成