Python: каков правильный способ поднять тревогу, если значение не соответствует ожидаемому?

#python

#python

Вопрос:

У меня есть список файлов, имя которых содержит некоторые данные, которые я собираю.

Я хочу

  1. проверьте правильность данных,
  2. если нет, поднимите allarm

Каков правильный способ сделать это? Мой код работает, но я не уверен, должен ли я вызывать NameError или другой тип

 expected_value='has-to-be-this-exact-value'

#importing files, with information stored in the name
filename_1 = 'whatever_has-to-be-this-exact-value'
filename_2 = 'whatever_not-the-same-should-raise-error'

def catch_name_error (filename, expected_value):
    if filename.split('_')[1]!=expected_value:
        print (filename.split('_')[1])
        raise NameError("Names dont match")

catch_name_error(filename_1,expected_value)  
print ('nothing happend')
catch_name_error(filename_2, expected_value)
  

out:

 nothing happend
not-the-same-should-raise-error
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-62-d6f6ad995399> in <module>
     12 catch_name_error(filename_1,expected_value)
     13 print ('nothing happend')
---> 14 catch_name_error(filename_2, expected_value)

<ipython-input-62-d6f6ad995399> in catch_name_error(filename, expected_value)
      8     if filename.split('_')[1]!=expected_value:
      9         print (filename.split('_')[1])
---> 10         raise NameError("Names dont match")
     11 
     12 catch_name_error(filename_1,expected_value)

NameError: Names dont match
  

Комментарии:

1. Я предлагаю поднять ValueError .

Ответ №1:

Взгляните на список встроенных исключений в документации Python: https://docs.python.org/3/library/exceptions.html

В вашем случае кажется, что a ValueError может быть подходящим:

исключение ValueError

Возникает, когда операция или функция получает аргумент, который имеет правильный тип, но неподходящее значение, и ситуация не описывается более точным исключением, таким как IndexError .

Комментарии:

1. спасибо, и чаще ли помещать последовательность «ошибка повышения» в свою собственную функцию и вызывать ее, когда вам это нужно; или я должен сразу записывать ее в каждую функцию?

Ответ №2:

Попробуйте использовать «try-except с ValueError»

 def catch_name_error (filename, expected_value):
    try:
        if filename.split('_')[1]!=expected_value:
            print (filename.split('_')[1])
    except ValueError:
            print("The name has error or something ")