当出现异常时不继续



我想使用"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()

不要捕捉异常,除非实际上知道如何处理它。

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()

将函数调用封装在更高级别的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将不会被调用。

添加以显示一个如何清理,但这不是应该处理的方式

@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()

使用通常为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()

最新更新