Я не могу показаться, чтобы получить timeit.timeit
работать, когда у меня есть исключения в аргументе заявление передается в виде строки:Использование внутри timeit запятой
# after the first and third semicolon, I put 4 spaces
timeit.timeit('try:; a=1;except:; pass')
Это приводит к:
Traceback (most recent call last):
File "a.py", line 48, in <module>
timeit.timeit('try:; a=1;except:; pass')
File "C:\CPython33\lib\timeit.py", line 230, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "C:\CPython33\lib\timeit.py", line 136, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 6
try:; a=1;except:; pass
^
SyntaxError: invalid syntax
Я запуская его с Python 3.3, но такая же ошибка происходит и со старым Python (3.2).
UPDATE:
Я следовал this documentation (курсив мой):
класса timeit.Timer (STMT = 'проход', настройки = 'проход', таймер =)
Class для синхронизации времени выполнения небольших фрагментов кода.
Конструктор принимает инструкцию для синхронизации, дополнительную инструкцию , используемую для настройки, и функцию таймера. Оба оператора по умолчанию: 'pass'; функция таймера зависит от платформы (см. строку модуля doc ). stmt и setup могут также содержать несколько операторов, разделенных ; или символы новой строки, если они не содержат многострочной строки литералов.
Спасибо .. вы можете проверить обновленный вопрос? И фактически 'timeit.timeit ('a = 1; b = 1')' отлично работает ... – max
@max - Точки с запятой будут отлично работать для разделения операторов, которые будут иметь одинаковый уровень отступов, но любые пробелы или вкладки, которые вы ставите между точкой с запятой и следующей операцией будет проигнорировано, поэтому вы не можете использовать их с отступом. –
@max, ';' не будет работать для try/except, для циклов, while циклов, если блоков и т. Д. Он работает только для разделения простых операторов. –