在程序化python脚本中引发自定义错误

在程序化python脚本中引发自定义错误,python,pandas,exception,Python,Pandas,Exception,我正在使用pandas编写一个简短的数据分析脚本,并将结果写入带有图表的excel表格 目前,我正在使用sys.exit让用户意识到与输入数据相关的问题 以下是一个例子: if len(titles) != len(plot_key): raise sys.exit('Error: Number of chart titles does not equal the number of plots to be generated') 在一种情况下,我希望与用户共享存储在变量中的更多信息

我正在使用pandas编写一个简短的数据分析脚本,并将结果写入带有图表的excel表格

目前,我正在使用
sys.exit
让用户意识到与输入数据相关的问题

以下是一个例子:

if len(titles) != len(plot_key):
    raise sys.exit('Error: Number of chart titles does not equal the number of plots to be generated')
在一种情况下,我希望与用户共享存储在变量中的更多信息

if df[df.Well > 3].empty is False:
    sys.exit('Error: Data contains more than 3 wells.')
如果条件为
True
df[df.Well>3]
中有值,我想与用户共享
df[df.Well>3]
的索引,以便他们知道问题存在的位置,而不是让他们自己去解决

现在我正在做这件事,但它看起来像一个黑客

if df[df.Well > 3].empty is False:
    print df[df.Well > 3].index.get_values()
    sys.exit('Error: Data contains more than 3 wells.')

任何关于最佳实践的建议都将不胜感激。

引发自定义错误的python方法是定义自己的异常。这可能看起来像:

class MyCustomException(Exception):
    pass

class ChartTitles(MyCustomException):
    pass

class TooManyWells(MyCustomException):
    pass

if len(titles) != len(plot_key):
    raise ChartTitles(
        'Number of chart titles does not equal the number of plots to be generated')      

if not df[df.Well > 3].empty:
    raise TooManyWells(
        "Data contains more than 3 wells '%s'" % df[df.Well > 3].index.get_values())

将所有自定义异常基于一个基本自定义异常可以更容易地捕获所有异常。

您可以创建新类,该类从
异常
类扩展,并在
初始化
str
方法中传递数据。或者您可以
引发异常(“您的输出”)
这对我来说终于有意义了。我已经在网上阅读了100篇关于异常的“教程”,但从未点击过。唯一的问题是,在面向对象较少的脚本中,这仍然是首选方法?我不相信异常是OO还是非OO。class=OO的定义是否正确?否,
class==object
。python中的一切都是对象。面向对象是面向对象的。你可以用一种非面向对象的方式使用对象。好啊我认为这是有道理的。脱离主题,但对象只是类的实例,对吗?