Me parece que no puede conseguir timeit.timeit
a trabajar cuando tengo excepciones en el argumento de la declaración aprobada como cadena:Uso de punto y coma dentro timeit
# after the first and third semicolon, I put 4 spaces
timeit.timeit('try:; a=1;except:; pass')
Esto se traduce en:
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
estoy ejecutarlo con Python 3.3, pero el mismo error ocurre incluso con el viejo Python (3.2).
ACTUALIZACIÓN:
estaba siguiendo this documentation (el énfasis es mío):
timeit.Timer clase (prop 'pase' =, = configuración 'pase', temporizador =)
Clase para temporizar la velocidad de ejecución de pequeños fragmentos de código.
El constructor toma una instrucción para ser temporizada, una instrucción adicional utilizada para la configuración y una función de temporizador. Ambas declaraciones por defecto son 'pass'; la función del temporizador depende de la plataforma (consulte la cadena del documento ). stmt y setup también pueden contener múltiples declaraciones separadas por; o saltos, siempre que no contengan literales de varias líneas literales.
Gracias .. ¿puedes por favor verifica la cuestión actualizada? Y de hecho 'timeit.timeit ('a = 1; b = 1')' funciona bien ... – max
@max - Los puntos y coma funciona bien para separar declaraciones que tendrían el mismo nivel de sangría, pero cualquier espacio o pestaña que pones entre el punto y coma y la siguiente instrucción se ignorarán para que no pueda usarlos con sangría. –
@max, el ';' no funcionará para try/except, for loops, while loops, if blocks, etc. Solo funciona para separar declaraciones simples. –