Python 在timeit中使用分号

Python 在timeit中使用分号,python,exception,timeit,Python,Exception,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('t

在作为字符串传递的语句参数中出现异常时,我似乎无法使
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
回溯(最近一次呼叫最后一次):
文件“a.py”,第48行,在
timeit.timeit('try:;a=1;除了:;pass')
文件“C:\CPython33\lib\timeit.py”,第230行,在timeit中
返回计时器(stmt、设置、计时器)。timeit(数字)
文件“C:\CPython33\lib\timeit.py”,第136行,在\uuu init中__
代码=编译(src,dummy\u src\u name,“exec”)
文件“”,第6行
尝试:;a=1;除:;通过
^
SyntaxError:无效语法
我使用Python3.3运行它,但即使使用旧的Python(3.2),也会发生同样的错误

更新:

我(强调我的)是:

类timeit.Timer(stmt='pass',setup='pass',Timer=)

类,用于计时小代码段的执行速度

构造函数接受一个要计时的语句,一个附加语句 用于设置和定时器功能。这两个语句都默认为 “通过”;定时器功能取决于平台(参见模块文档 字符串)stmt和setup也可能包含多个分隔的语句 通过或换行符,只要它们不包含多行字符串 文字


您需要使用换行符而不是分号提供正确缩进的代码。尝试将其更改为以下内容:

timeit.timeit('try:\n    a=1\nexcept:\n    pass')
尽管这可能更易于阅读,如下所示:

stmt = '''\
try:
    a=1
except:
    pass'''
timeit.timeit(stmt)

分号可以很好地分隔具有相同缩进级别的语句,但是在分号和下一个语句之间放置的任何空格或制表符都将被忽略,因此不能将它们用于缩进。

这是一个旧线程,但可能值得更新。另一个使用textwrap的选项通过允许代码具有基本缩进级别来提高可读性:

import timeit
import textwrap
print(timeit.timeit(textwrap.dedent("""
  try:
    a=1
  except:
    pass
  """), number=10))

非常感谢。你能检查一下更新的问题吗?事实上,
timeit.timeit('a=1;b=1')
很好…@max-分号可以很好地分隔具有相同缩进级别的语句,但是分号和下一个语句之间的任何空格或制表符都将被忽略,因此不能与缩进一起使用。@max,
不适用于try/except、for循环、while循环、if块等。它只适用于分隔简单语句。