Python IDLE:如何输入正确的缩进?

时间:2014-08-24 03:13:50

标签: python python-3.x python-idle

Mac:Maverick Python:3.4

我尝试在Python的IDLE中测试timeit模块

import timeit

>>> timeit.timeit( "obj.method", """
    class SomeClass:
        def method(self):
            pass
    obj = SomeClass()
""")

当我尝试在def method(self):的下一行输入class SomeClass时,我点击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

有人可以解释一下:

  1. 如何修复它,
  2. 如何避免出现My Document的提示?
  3. THX !!!

2 个答案:

答案 0 :(得分:1)

试试这个:

>>> timeit.timeit( "obj.method", """
class SomeClass:
    def method(self):
        pass
obj = SomeClass()
""")

如果在常规python模块中定义了一个带有额外缩进的类,如下所示:

    class Hello:
        pass

解释器会抛出IndentationError。 timeit方法似乎解析输入字符串就像解析常规python文件一样,并出于类似的原因抛出缩进错误。请注意,您的字符串以关键字“Class”之前的额外(和不必要的)缩进开头。换行没问题。将空格与制表符混合也可能导致缩进错误。

我没有mac,我无法重新创建“mydocument”问题所以我无法帮助你:(

答案 1 :(得分:0)

使用timeit的巧妙技巧可避免多行引用代码问题:首先定义测试对象并从__main__

导入它
>>> class SomeClass:
        def method(self):
                pass

>>> obj = SomeClass()

>>> timeit.timeit( "obj.method", "from __main__ import obj")
# 0.07362023352140716