Python IDLE:如何正确输入缩进?
Mac: Mavericks系统
Python: 3.4版本
我在Python的IDLE里尝试测试timeit
模块。
import timeit
>>> timeit.timeit( "obj.method", """
class SomeClass:
def method(self):
pass
obj = SomeClass()
""")
当我在class SomeClass
的下一行输入def method(self):
时,我按了Tab
键,结果弹出了一个窗口,显示了我Document
目录里的文件。所以我就按了Ctrl+Tab
。
但是我还是遇到了错误:
Traceback (most recent call last):
File "<pyshell#26>", line 6, in <module>
""")
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 213, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 122, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 9
_t0 = _timer()
^
IndentationError: unindent does not match any outer indentation level
有人能解释一下吗:
- 怎么解决这个问题,
- 怎么避免弹出
My Document
窗口?
谢谢!!!
2 个回答
0
一个很实用的技巧,可以帮助你在使用timeit时避免多行代码的问题:先定义好你的测试对象,然后从__main__
中导入它。
>>> class SomeClass:
def method(self):
pass
>>> obj = SomeClass()
>>> timeit.timeit( "obj.method", "from __main__ import obj")
# 0.07362023352140716
1
试试这个:
>>> timeit.timeit( "obj.method", """
class SomeClass:
def method(self):
pass
obj = SomeClass()
""")
如果你在一个普通的 Python 模块中定义一个类,像这样多加了一个缩进:
class Hello:
pass
解释器会报错,提示有缩进错误。timeit 方法似乎会像处理普通的 Python 文件一样解析输入的字符串,因此也会因为类似的原因报缩进错误。注意,你的字符串在“Class”这个关键词前面多了一个(不必要的)缩进。换行是可以的。另外,空格和制表符混用也可能导致缩进错误。
我没有 Mac,所以无法重现“mydocument”这个问题,帮不了你 :(