Попробуйте сделать что-то вроде этого,
from signal import pause
from gpiozero import Button
class pressException( Exception ):
pass
def raisePressException():
raise pressException( 'Button held' )
try:
push = Button( 5 )
push.when_held = raisePressException()
pause()
except pressException:
print( 'Exception accepted' )
. Причина, по которой это происходит, заключается в том, что вы вызываете ошибку за пределами try и исключения, и, следовательно, она не может перехватить ошибку, а также вы вызывали свою собственную функцию повышения в цикле, даже если вы попытаетесь поймать свой собственный код, он окажется в цикле рекурсии
Вопросы:
Вы имеете (у них) никогда не было аварии, куда Вы (они) должны были вернуться к предыдущей версии веб-сайта, но не могли, потому что они повредили его?
Они используют веб-сервер подготовки для тестирования изменений?
Конечно, они не изменяют код в рабочем сервере без некоторого тестирования где-нибудь?
Я подозреваю, что ответ на первое - "да (у них были аварии)", и второй "нет", и я смущаюсь предполагать ответ для третьего (но. от звуков его ответ мог бы быть "да, они действительно делают"). Если это корректно, я восхищаюсь их бравадой, и поражен, что они никогда не делают ошибку. Я никогда не рисковал бы делать изменения прямыми на живом веб-сайте.
Я рекомендовал бы использовать систему управления версиями или VCS (любой VCS) самостоятельно. Разработайте морщины для кода, о котором Вы заботитесь и разрабатываете гладкое распределение, которое помогает (вероятно, все еще использование SFTP) распределить код VCS веб-сайту. Но также и покажите, что сохранение предыдущих версий имеет свои достоинства - потому что можно восстановиться, кто сделал что когда. Прежде всего, Вы могли бы найти, что необходимо загрузить текущую версию любой страницы (файл), необходимо продолжить работать и поместить ту последнюю версию в VCS, прежде чем Вы начнете изменять страницу, потому что кто-то еще, возможно, изменил его, так как это обновилось в Вашем главном репозитории. Вы могли бы также хотеть сделать ежедневное 'царапанье' файлов для получения текущих версий - и изменения дорожки. Вы не имели бы, 'кто', ни точно 'когда' (лучше, чем к ближайшему дню), ни, 'почему', но Вы будете иметь (кумулятивный) 'что' из изменений.
В ответе на комментарии в вопросе Ólafur Waage разъяснил, что у них были аварии из-за отсутствия VCS.
Это обычно делает жизнь намного легче. Они попали впросак; они не могли отменить глупость - они, вероятно, раздражали клиентов, и они должны были невероятно раздражаться из-за себя. VCS делает намного легче восстановиться с таких ошибок. Очевидно, для любого данного настроенного сайта, Вам нужно (центральное) резервное копирование 'корректной' или 'официальной' версии того сайта, доступного в VCS. Я, вероятно, пошел бы для единого репозитория для всех клиентов, с помощью VCS, который имеет хорошую поддержку того, чтобы перейти и объединиться. Это может быть более твердо иметь дело со сначала (в то время как люди привыкают к использованию VCS), но вероятно приводит к лучшим результатам в долгосрочной перспективе. Я серьезно рассмотрел бы использование на современного распределенного VCS (например, мерзавец), хотя много людей использует SVN также (даже при том, что это не распределенный VCS).
можно использовать черепаху svn клиент, чтобы создать и работать с репозиторием на локальной машине на некотором другом пути к файлу затем рабочий тракт....
возможно, попытайтесь установить и использовать это для себя и показать им через некоторое время, что это может сделать для Вас. другая прохладная вещь могла бы устанавливать trac (http://trac.edgewall.org/) на Вашем сервере, если у Вас есть доступ и полномочия сделать так, или возможно в некоторой виртуальной машине на Вашей собственной машине разработки. можно отобразить trac на svn и получить изменения svn в веб-интерфейсе, который можно показать менеджеру проектов. возможно, он попадется на это, он сможет видеть, что код изменяется легко через веб-интерфейс. конечно, можно сделать это только с апачем + svn модуль, но это более хорошо, поскольку он предлагает путь к покупке билетов и roadmapping (этапы и материал, который могли бы вырыть менеджеры: o))..
удача во всяком случае :). по крайней мере, используйте его для своей работы над Вашей локальной машиной, поскольку существует только усиление для Вас делающий это.
Можно установить SVN в локальной системе для демонстрации. Существуют некоторые инструменты для интеграции Пехлеви и Eclipse к SVN. Я думаю в дополнение к выполнению демонстрации SVN, необходимо, вероятно, дать им презентацию некоторых преимуществ, которые это даст (вероятно, во время демонстрации).
Перейдите к этой ссылке для некоторых идей: мне Действительно нужно Управление версиями?
Вот один прием, который все будут любить:
Я включаю этот 'плагин' в большинство своих мест производства: Конечно, необходимо создать робот ограниченных прав svn счет на это сначала, и svn должен быть установлен на сервере.
echo(' updating from svn<br>' );
$username = Settings::Load()->Get('svn','username');
$password = Settings::Load()->Get('svn','password');
echo(" <pre>" );
$repos = Settings::Load()->Get('svn' , 'repository');
echo system ("svn export --username={$username} --password {$password} {$repos}includes/ ".dirname(__FILE__)."/../includes --force");
echo system("svn export --username={$username} --password {$password} {$repos}plugins/ ".dirname(__FILE__)."/../plugins --force");
die();
Удостоверьтесь, что Вы помещаете это позади .htpasswded сайта, конечно, и удостоверяетесь, что не обновляете 'производственные настройки' от SVN. И вуаля, Вы обновляете свою полную кодовую базу с одним Запросом HTTP Вашему сайту :) SVN перезаписывает файлы автоматически, нет никаких скрытых файлов или оставленных позади папок и его легко адаптированы, чтобы обновить или вернуться к определенной версии. Теперь вся Ваша команда должна сделать, соглашаются на их репозиторий SVN, выполняют эту часть кода тестовой среды, удостоверьтесь, что все работает и затем выполняет его на производстве :)
Просто помещенный т.е. SVN в середине.
Команда разработчиков поместила новый материал в подверсию, и затем у Вас есть сценарий, которые экспортируют материал из svn, и отправляет его на веб-сервер.
Это вполне близко к способу, которым они работают сегодня, но каждое небольшое изменение было зарегистрировано в подверсии поэтому, если удары молнии возможно поддержать все вовремя действительно быстро.
/Johan
Ólafur, Вы упомянули, что "студия делает систему CMS, которая размещается на сотнях сайтов". Это само может быть морковью, в которой Вы нуждаетесь. Если команда часто развертывает обновления этих сотен сайтов, то использование ответвлений в системе управления версиями может сделать этот процесс намного легче для всех. Это могло сэкономить время и таким образом предоставит стимул людям изучить систему управления версиями.
Это кажется, что эти сайты все связаны - настроенные версии того же CMS. В этом случае необходимо поместить все сайты в том же репозитории, в дополнение к неспециализированному продукту CMS. Затем можно настроить их всех как ответвления того же центрального продукта. При использовании отдельных репозиториев нет простых способов создать ответвления для связи настроек с основным продуктом. (Я думаю, что можно сделать это с Подверсией и наиболее вероятными другими, но это усложнило и ненужный, если все разработчики работают на ту же организацию.)
VisualSVNServer и TurtoiseSVN являются этими двумя программами, которые я использую, они и хорошо документируются, и он интегрируется так хорошо с Windows Explorer и Visual Studio.
Сделайте часть развертывания автоматизированного процесса 'сборки', таким образом, никакой разработчик не должен волноваться об этом. Используйте 'потоки' для хранения работы в области разработки, быстродействующая область и область выпуска затем имеют автоматизированные процессы, которые развертывают последнее достижение, обеспечение качества и выпускают среды.