Найти - Пользователи
Полная версия: PEP 8
Начало » Python для новичков » PEP 8
1 2
SomethingButNotNickName
Добрый день.
Задача создать каталог и скопировать в него файл. Запускаться этот код будет несколько раз, поэтому нужно перехватить ошибку FileExistsError. Пишу код и получаю от PyCharm'a предупреждение о запрете использования голого except'a
 import shutil
import os
try:
    os.mkdir('123')
except: FileExistsError            #Do not use bare except
shutil.copy('my_file.mp3', '.' + '\\' + '123' + '\\')
Единственный вариант, приходящий мне в голову, как изменить код, чтобы не было этой ошибки:
 try:
    os.mkdir('123')
    shutil.copy('my_file.mp3', '.' + '\\' + '123' + '\\')
except FileExistsError:            
    shutil.copy('my_file.mp3', '.' + '\\' + '123' + '\\')
Но писать одну и туже команду дважды в коде, наверно, тоже не лучшая практика.
Как более правильно сделать?
И еще вопрос по поводу записи пути к файлу. Использование кучи “+” как у меня тоже наверняка
плохой вариант. Как лучше склеить путь?


JOHN_16
эээээ
  import shutil
import os
try:
    os.mkdir('123')
except FileExistsError:            # двоеточие как бы не на том месте
    shutil.copy('my_file.mp3', '.' + '\\' + '123' + '\\')
JOHN_16
SomethingButNotNickName
Как лучше склеить путь?
эээ а зачем так делать если можно просто
 shutil.copy('my_file.mp3', '.\\123\\')
JOHN_16
А PEP8 вам говорил что запись вида
 try:
    some_code
except:
    some_code
лучше заменить на хотя бы
 try:
    some_code
except Exception:
    some_code
что бы не перехватывать абсолютно все исключения, включая прерывание с клавиатуры, системный выход и тп
JOHN_16
SomethingButNotNickName
Как лучше склеить путь?
если у вас есть переменная с частью пути, то можно использовать шаблоны строк, например
 s = 'will'
'/some/path/{}/be/here'.format(s)
если есть список строк которые нужно объединить в путь то так
import os
s = 'sparta'
vars = ['this', 'is', s, '!!1']
os.sep.join(vars)
обычная конкатенация строк, в общем то, не преступление, использовать можно
SomethingButNotNickName
Спасибо, с двоеточием действительно все элементарно)
SomethingButNotNickName
JOHN_16
эээээ

 try:
    os.mkdir('123')
except FileExistsError:            # двоеточие как бы не на том месте
    shutil.copy('my_file.mp3', '.' + '\\' + '123' + '\\')
Стоп, в таком случае копирование выполнится только если вызовется ошибка FileExistsError.
А мне нужно чтобы копирование выполнялось в любом случае.
Т.е. каталог создается единожды, при попытке скопировать первый файл.
А потом при попытке скопировать второй и последующие файлы мы пропускаем создание каталога и сразу копируем файл. По сути блок except должен быть пустым. И именно на это ругается PyCharm.
JOHN_16
Тогда try finaly использовтаь надо. Это тоже элементарно - надо всего лишь обратиться в документацию или учебник/книгу
SomethingButNotNickName
Для примера воспользуется делением и соответствующей ошибкой:
Команда печати “Hello world” это команда которую я хочу выполнить в любом случае (как копирование в предыдущем примере).
 a = 0
b = 5
try:
    c = b / a
except ZeroDivisionError:
finally:
    print('Hello world')

В результате перехватили ошибку деления на ноль, и мой print()сработает в любом случае, но такой код не будет работать по причине пустого except'a. И мы снова упираемся в: либо дублирование команды print()
либо переставления двоеточия. И finally нам ничем не помог.
JOHN_16
In [1]: try:
...: 1 / 0
...: except ZeroDivisionError:
...: pass
...: finally:
...: print('Oops')
...:
Oops
SomethingButNotNickName
Ваша проблема в том что вы думаете что знаете питон, поэтому разбрасываетесь такими словечками с привкусом пафоса
SomethingButNotNickName
И finally нам ничем не помог.
не зная как делать правильно
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB