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块等。它只适用于分隔简单语句。