如何处理内部类执行错误?返回一些东西,以便外部函数知道并使用其他数据调用该类。在Python中执行此操作的正确方法是什么?
我知道我们可以通过执行以下操作来处理所有异常:
import sys
try:
do_something()
except Exception:
do_something_else()
system.exit('Something happened')
并且“system.exit('Something happened')
”行将退出Python。
问题是我有一个类,有三个方法加上__init__()
方法。共有四种方法或功能。我有一个函数,使用不同的值调用此类,并且该类执行其操作。我没有在课堂上进行任何异常处理,因为我不知道该怎么做。
这是我班级的样子。
class myClass:
def __init__(self, values, more values):
config = []
answer = self.first_method(values)
if answer == True:
self.third_method(values, more_values, answer)
def first_method(values):
my_tuple = self.second_method(values)
return my_tuple
def second_method(values)
do_stuff
return stuff
def third_method(values, more_values, answer):
do_stuff...
外部功能看起来像:
from my myclass import myClass
def my_function():
count = 0
more_values = [6,7,8,9,10]
list_of_values = [1,2,3,4,5]
for values in list_of_values:
myClass(values, more_values)
count += 1
我需要的是,如果first_method()
,second_method()
和third_method()
中发生了某些事情。我将需要停止该类并返回一些内容,以便外部函数将我知道这个课已经被某些东西拦住了,然后跳过那个并尝试下一个。我能说清楚吗?
我没有显示我的类中的代码,因为我仍在处理类本身以及外部函数。但那是主要的想法。
可能很重要的东西:我正在尝试执行的是创建一些图像,我正在使用PIL。我一直在导入以下内容:
from PIL import Image, ImageFont, ImageOps, ImageDraw
答案 0 :(得分:0)
根据我关于避免你不真正需要的课程的评论,尝试这样做:
def start(values, more values):
config = []
answer = runfirst(values)
if answer == True:
runthird(values, more_values, answer)
def runfirst(values):
my_tuple = runsecond(values)
return my_tuple
def runsecond(values):
do_stuff
return stuff
def runthird(values, more_values, answer):
do_stuff...
然后,在你的"外面"功能:
from myfunctions import start
def my_function():
count = 0
more_values = [6,7,8,9,10]
list_of_values = [1,2,3,4,5]
for values in list_of_values:
try:
start(values, more_values)
except (ValueError, IndexError) as exc:
print("Houston, we've had a problem:", exc)
continue
count += 1
没有必要的课程:你所有的第一,第二和第三个功能都整齐地存放在他们自己的模块中,并且不需要上课。
注意:永远不要使用通用except Exception
捕获每个异常。捕获特定的例外情况。因为总有一个例外你忽略了,你真的想要一路冒出来。
答案 1 :(得分:0)
您可以使用"尝试","除了"和"引发"在一起:尝试内部函数的东西,如果它导致异常,用" raise"将它抛出到外部函数,然后在外部函数上尝试调用第一个函数,如果它引发异常移动到第二个函数一个等等。
您的代码,类和函数非常混乱,因此我会尝试做出更通用的答案(您需要自己处理 init 函数)
class myClass:
def __init__(self, values, more_values):
config = []
"""answer = self.first_method(values)
if answer == True:
self.third_method(values, more_values, answer)"""
def first_method(self, values):
print "executing first function"
try:
stuff = "stuff"
#my_tuple = self.second_method(values)
x = 5/0 #causing an exception
return stuff
except Exception as e:
raise(e)
def second_method(self, values):
print "executing second function"
try:
#do_stuff
stuff = "stuff"
x = 5/0 #causing an exception
return stuff
except Exception as e:
raise(e)
def third_method(self, values, more_values, answer):
print "executing third function"
try:
#do_stuff...
stuff = "stuff"
x = 5/0 #causing an exception
return stuff
except Exception as e:
raise(e)
外部功能:
def my_function():
count = 0
more_values = [6,7,8,9,10]
list_of_values = [1,2,3,4,5]
#for values in list_of_values:
if(1 == 1):
mc = myClass(values, more_values)
#count += 1
try:
mc.first_method(values)
except Exception as e:
try:
mc.second_method(values)
except Exception as e:
try:
mc.third_method(values, more_values, "answer")
except Exception as e:
print "My three functions have failed :-("