Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2011 17:27:38

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Элегантно сделать

Какое исключение - в принципе не важно. Мы читаем кэш файл, если файл не найден - вызывается функция, заполняющая его данными, и читаем его еще раз.



Офлайн

#2 Янв. 9, 2011 17:33:40

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Элегантно сделать

Не буду навязывать стиль, но я в таких прямолинейных случаях просто if использую.



Офлайн

#3 Янв. 9, 2011 17:37:20

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Элегантно сделать

Меня интересовал абстрактный случай, но вот конкретный:

    try:
List = pickle.load(file(filename))
except IOError:
refresh()
List = pickle.load(file(filename))
Получается копипаст кода.



Офлайн

#4 Янв. 9, 2011 17:58:10

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Элегантно сделать

if not os.path.exist(name):
refresh()
List = pickle.load(file(filename))
общий try не помешает конечно



Офлайн

#5 Янв. 9, 2011 19:44:27

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Элегантно сделать

А как это сделать в абстрактном случае, если узнать, будет ли ошибка, можно, только выполнив выражение?



Офлайн

#6 Янв. 9, 2011 20:25:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Элегантно сделать

asilyator
Меня интересовал абстрактный случай, но вот конкретный:
    try:
List = pickle.load(file(filename))
except IOError:
refresh()
List = pickle.load(file(filename))
Получается копипаст кода.
дурь какая то если честно
Почему нельзя сразу вызов функции обернуть в цикл?



Офлайн

#7 Янв. 9, 2011 22:01:23

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Элегантно сделать

что-б не было копипаста - выносите в ф-ию, для этого они и созданы.
к goto так же относится - если хотите goto значит нужно использовать ф-ии…

Офлайн

#8 Янв. 10, 2011 00:32:48

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Элегантно сделать

:-)

while True:
try:
List = pickle.load(file(filename))
except IOError:
refresh()
else:
break
А если серьёзно, то за такой код нужно кастрировать.

..bw



Офлайн

#9 Янв. 10, 2011 10:21:26

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Элегантно сделать

bw
А если серьёзно, то за такой код нужно кастрировать.
:) А за что так?



Офлайн

#10 Янв. 10, 2011 12:24:55

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Элегантно сделать

Вызовите метод два раза как и собирались, никто от этого не пострадает. А вот эти “элегантные” нагромождения с while else break сразу вызовут вопросы и недоумение у того, кто будет читать код. KISS.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version