timeit模块python中的Unicode转义错误

时间:2019-06-24 21:14:07

标签: python timeit

我目前正在使用timeit内置的python库来获取小代码段的执行时间。

我的代码:-

import timeit

print(timeit.timeit(setup='env = "C:\\Users\\MyName"', stmt='a = f"{env} is my username"'))

上面的代码在执行后会产生Unicode Escape Error

错误堆栈:-

Traceback (most recent call last):
  File "D:/Users/apple/vul.py", line 3, in <module>
    print(timeit.timeit(setup='env = "C:\\Users\\MyName"', stmt='a = f"{env} is my username"'))
  File "C:\Users\apple\AppData\Local\Programs\Python\Python37-32\lib\timeit.py", line 232, in timeit
    return Timer(stmt, setup, timer, globals).timeit(number)
  File "C:\Users\apple\AppData\Local\Programs\Python\Python37-32\lib\timeit.py", line 109, in __init__
    compile(setup, dummy_src_name, "exec")
  File "<timeit-src>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

通常,当字符串中有转义符解释时(通过单个\后跟一个字符)会产生此错误。但就我而言,我已经使用\\(双反斜杠)对字符串内的反斜杠进行了转义。

1 个答案:

答案 0 :(得分:1)

您已经正确诊断了问题:字符串中的转义序列解释。

您一次逃脱了反斜杠。这意味着timeit在其setup参数中接收以下字符串:'env = "C:\Users\MyName"',每次出现都带有一个\。并且,当执行字符串时,它会发现被视为有害的Unicode序列:'\Users'

易于修复:

print(timeit.timeit(setup=r'env = "C:\\Users\\MyName"', stmt='a = f"{env} is my username"'))