#python #python-3.x #error-handling #try-except
#python #python-3.x #обработка ошибок #try-except
Вопрос:
У меня есть мой основной скрипт на Python, в котором я вызываю функцию. Я хочу отслеживать любые ошибки, которые происходят во время выполнения функции, и если есть какие-либо ошибки, я хочу установить переменной error значение true. Выполняется ли оператор try / except в основном скрипте следующим образом:
try:
image_convert(filepath,'.jpg','RGB',2500,2500)
except:
error = true
Или это делается внутри функции следующим образом:
def image_convert(filepath,imageType,colorMode,height,width):
try:
imwrite(filepath[:-4] imageType, imread(filepath)[:,:,:3].copy()) # <-- using the imagecodecs library function of imread, make a copy in memory of the TIFF File.
# The :3 on the end of the numpy array is stripping the alpha channel from the TIFF file if it has one so it can be easily converted to a JPEG file.
# Once the copy is made the imwrite function is creating a JPEG file from the TIFF file.
# The [:-4] is stripping off the .tif extension from the file and the '.jpg' is adding the .jpg extension to the newly created JPEG file.
img = Image.open(filepath[:-4] imageType) # <-- Using the Image.open function from the Pillow library, we are getting the newly created JPEG file and opening it.
img = img.convert(colorMode) # <-- Using the convert function we are making sure to convert the JPEG file to RGB color mode.
imageResize = img.resize((height, width)) # <-- Using the resize function we are resizing the JPEG to 2500 x 2500
imageResize.save(filepath[:-4] imageType) # <-- Using the save function, we are saving the newly sized JPEG file over the original JPEG file initially created.
return(imageResize)
except:
error = true
Комментарии:
1. От второй версии будет мало толку, если вы не сделаете
error
переменную каким-либо образом доступной для вызывающего контекста.2. Я бы не стал улавливать ошибку в функции. Если вы это сделаете, ваша функция будет беспокоиться об обработке ошибок наряду со своей реальной задачей. Если он выдает ошибку, то она выдает ошибку. Тот, кто хочет разобраться с ошибкой, может ее перехватить. Иногда это уместно, но я не вижу здесь никаких причин, по которым функция должна что-либо знать о
error
.3. Может быть комбинацией обоих , в зависимости от того, какие исключения могли быть вызваны. С некоторыми из них вы можете каким-то образом справиться внутри функции, другие, возможно, лучше распространить, чтобы дать кому-то другому возможность с ними справиться.
Ответ №1:
Первый метод будет работать
try:
image_convert(filepath,'.jpg','RGB',2500,2500)
except:
error = true
Ответ №2:
Поскольку вызов функции выполняется изнутри блока try, любые ошибки / исключения во время выполнения кода функции также попадают в область блока try и, следовательно, будут перенаправлены в блок except.
простым примером этого может быть приведенный ниже:
def test():
raise Exception
try:
test()
except:
error = True
print(error)
результат будет :
Верно