Используйте эту функцию для изменения времени системы (проверено в окне 8)
void setDate(string dateInYourSystemFormat)
{
var proc = new System.Diagnostics.ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = @"C:\Windows\System32";
proc.CreateNoWindow = true;
proc.FileName = @"C:\Windows\System32\cmd.exe";
proc.Verb = "runas";
proc.Arguments = "/C date " + dateInYourSystemFormat;
try
{
System.Diagnostics.Process.Start(proc);
}
catch
{
MessageBox.Show("Error to change time of your system");
Application.ExitThread();
}
}
void setTime(string timeInYourSystemFormat)
{
var proc = new System.Diagnostics.ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = @"C:\Windows\System32";
proc.CreateNoWindow = true;
proc.FileName = @"C:\Windows\System32\cmd.exe";
proc.Verb = "runas";
proc.Arguments = "/C time " + timeInYourSystemFormat;
try
{
System.Diagnostics.Process.Start(proc);
}
catch
{
MessageBox.Show("Error to change time of your system");
Application.ExitThread();
}
}
Пример: вызов метода загрузки формы setDate («5-6-92»); setTime ("2: 4: 5 AM");
Вы должны определить, какой тип исключения вы хотите поймать. Поэтому напишите except Exception, e:
вместо except, e:
для общего исключения (которое будет регистрироваться в любом случае).
Другая возможность состоит в том, чтобы написать весь ваш код try / except:
try:
with open(filepath,'rb') as f:
con.storbinary('STOR '+ filepath, f)
logger.info('File successfully uploaded to '+ FTPADDR)
except Exception, e:
logger.error('Failed to upload to ftp: '+ str(e))
в Python 3.x и современные версии Python 2.x используют except Exception as e
вместо except Exception, e
:
try:
with open(filepath,'rb') as f:
con.storbinary('STOR '+ filepath, f)
logger.info('File successfully uploaded to '+ FTPADDR)
except Exception as e:
logger.error('Failed to upload to ftp: '+ str(e))
Обновление этого для чего-то более простого для регистратора (работает как для python 2, так и для 3). Вам не нужен модуль трассировки.
import logging
logger = logging.Logger('catch_all')
def catchEverythingInLog():
try:
... do something ...
except Exception as e:
logger.error(e, exc_info=True)
... exception handling ...
Теперь это старый способ (хотя все еще работает):
import sys, traceback
def catchEverything():
try:
... some operation(s) ...
except:
exc_type, exc_value, exc_traceback = sys.exc_info()
... exception handling ...
exc_value - это сообщение об ошибке.
Вы можете явно указать тип BaseException. Тем не менее, это будет только улавливать производные BaseException. Хотя это включает все исключения для реализации, также возможно поднять произвольные классы старого стиля.
try:
do_something()
except BaseException, e:
logger.error('Failed to do something: ' + str(e))
Если вам нужен класс ошибок, сообщение об ошибке и трассировка стека (или любой из них), используйте sys.exec_info()
.
Минимальный рабочий код с некоторым форматированием,
import sys
import traceback
try:
ans = 1/0
except BaseException as ex:
# Get current system exception
ex_type, ex_value, ex_traceback = sys.exc_info()
# Extract unformatter stack traces as tuples
trace_back = traceback.extract_tb(ex_traceback)
# Format stacktrace
stack_trace = list()
for trace in trace_back:
stack_trace.append("File : %s , Line : %d, Func.Name : %s, Message : %s" % (trace[0], trace[1], trace[2], trace[3]))
print("Exception type : %s " % ex_type.__name__)
print("Exception message : %s" %ex_value)
print("Stack trace : %s" %stack_trace)
Который выдаст следующий результат,
Exception type : ZeroDivisionError
Exception message : division by zero
Stack trace : ['File : .\\test.py , Line : 5, Func.Name : <module>, Message : ans = 1/0']
Это дает вам сведения об исключении из последнего исключения. Он возвращает кортеж. Ниже приведены значения кортежа (type, value, traceback)
.
traceback - это экземпляр объекта трассировки. Вы можете отформатировать трассировку с помощью предоставленных методов. Подробнее можно узнать из документации о трассировке
e.__class__.__name__
также может вернуть класс исключения.
– kenorb
14 June 2018 в 20:13
Использовать str (ex) для печати исключения
try:
#your code
except ex:
print(str(ex))
Вы можете использовать logger.exception("msg")
для исключения журнала с трассировкой:
try:
#your code
except Exception as e:
logger.exception('Failed: ' + str(e))
e.msg
является строковым представлением класса Exception
.
– MarkHu
3 March 2016 в 21:54
Синтаксис больше не поддерживается в python 3. Используйте вместо этого следующее.
try:
do_something()
except BaseException as e:
logger.error('Failed to do something: ' + str(e))
logging.error('foo %s', str(e))
всегда будет преобразовывать e
в строку. Для достижения того, что вы используете, вы будете использовать logging.error('foo %s', e)
, тем самым позволяя системе ведения журналов делать (или не делать) преобразование.
– Ron Dahlgren
11 July 2016 в 23:29
logging.error('message %s', expression)
лениво оценивается независимо от выражения и только интерполирует строку, если на самом деле журнал будет выводиться в любом месте.
– avyfain
12 July 2016 в 03:56
В некоторых случаях вы можете использовать e.message или e.messages. Но это не работает во всех случаях. В любом случае более безопасным является использование str (e)
try:
...
except Exception as e:
print(e.message)
except Exception as e
и e
являются IOError
, вы получаете e.errno
, e.filename
и e.strerror
, но, по-видимому, нет e.message
(по крайней мере, в Python 2.7.12). Если вы хотите записать сообщение об ошибке, используйте str(e)
, как в других ответах.
– epalm
19 April 2017 в 18:28
logger.exception(e)
. Он будет регистрировать исключение с трассировкой на том же уровнеlogging.ERROR
. – mbdevpl 31 August 2016 в 09:50except Exception, e:
выдает мне синтаксическую ошибку в python 3. Ожидается ли это? – Charlie Parker 1 November 2017 в 05:12except Exception as e:
– eumiro 1 November 2017 в 06:38