2017-01-23 2 views
0

Я собираю короткий сценарий анализа данных с использованием pandas и записываю результаты на листе excel с графами.Повышение пользовательских ошибок в процедурных скриптах python

В настоящее время я использую 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.') 

Любые предложения по передовым методам будут очень признательны.

+2

Вы можете создать новый класс, который распространяется из класса 'Exception' и в методах' __init__' или '__str__', которые вы можете передать своим данным. Или вы можете «поднять Exception (« ваш вывод »)' –

ответ

0

Питонический способ поднять пользовательские ошибки - это определить свои собственные исключения. Это может выглядеть примерно так:

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

основывая все пользовательские исключения на один базовый пользовательский исключение делает его легче поймать все ваши исключения.

+0

Это, в конце концов, имеет смысл для меня. Я прочитал 100 «учебников» об исключениях в Интернете, которые я никогда не читал. Вопрос только в том, что это еще предпочтительный метод для менее объектно-ориентированных скриптов? – agf1997

+0

Я не считаю, что исключения OO или OO. –

+0

Не определяет класс = OO по определению? – agf1997