«Возвращает открытое соединение?» Если это соединение является общим в пуле (и может быть в будущем), вам не нужна другая транзакция, совершающая вашу предыдущую работу. Я видел МНОГИЕ клиенты / решения случаев подключения драйвера пула соединений, которые соответствуют интерфейсам JDBC, и Connection.close()
также можно использовать, чтобы просто вернуть соединение обратно в пул.
Кроме того, лучше try{}catch{}
вашего rollback()
(отредактируйте, просто прочитайте весь пост, но мне всегда нравится регистрировать исключение при откате)
main
может обернуть execfile
в try
/ except
block: sys.exit
вызывает исключение SystemExit, которое main
может перехватить в предложении except
, чтобы при желании продолжить его выполнение в обычном режиме. То есть в main.py
:
try:
execfile('whatever.py')
except SystemExit:
print "sys.exit was called but I'm proceeding anyway (so there!-)."
print "so I'll print this, etc, etc"
и любой .py
может использовать sys.exit (0)
или что-то еще для завершения своего собственного только исполнение. Любое другое исключение будет работать так же хорошо, пока это согласовано между источником как execfile
d и источником, выполняющим вызов execfile
, но особенно подходит SystemExit
подходит, поскольку его значение довольно ясно!
# script.py
def main():
print "Script starting"
a = False
if a == False:
# Sanity checks. Script should break here
# <insert magic command>
return;
# I'd prefer not to put an "else" here and have to indent the rest of the code
print "this should not print"
# lots of lines bellow
if __name__ == "__main__":
main();
Я нахожу этот аспект Python ( __ name __
== «__ main __
» и т.д.) раздражающим.
Что не так с простой старой обработкой исключений?
scriptexit.py
class ScriptExit( Exception ): pass
main.py
from scriptexit import ScriptExit
print "Main Starting"
try:
execfile( "script.py" )
except ScriptExit:
pass
print "This should print"
script.py
from scriptexit import ScriptExit
print "Script starting"
a = False
if a == False:
# Sanity checks. Script should break here
raise ScriptExit( "A Good Reason" )
# I'd prefer not to put an "else" here and have to indent the rest of the code
print "this should not print"
# lots of lines below