Unicode Escape Ошибка в модуле timeit python - PullRequest
0 голосов
/ 25 июня 2019

В настоящее время я использую 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

Эта ошибка обычно возникает при интерпретации последовательности Escape внутри строки (через один \, за которым следует символ),Но в моем случае я уже удалил обратную косую черту внутри строки, используя \\ (двойная обратная косая черта).

1 Ответ

1 голос
/ 25 июня 2019

Вы правильно диагностировали проблему: интерпретация escape-последовательности внутри строки.

Вы однажды избежали обратной косой черты.Это означает, что timeit получает в своем параметре setup следующую строку: 'env = "C:\Users\MyName"' с одним \ в каждом случае.И когда он выполняет строку, он находит то, что он видит как нарушающую последовательность Unicode: '\Users'.

Это легко исправить:

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