#python #syntax-error #user-input #sys #unicode-escapes
#python #синтаксическая ошибка #пользовательский ввод #система #unicode-экранирует
Вопрос:
Наши школьные задачи — добавить тестовый пример программы в нижней части кода с:
#example
"""
<insert example of you running the code>
"""
но когда я это делаю, я получаю ошибку. Я никогда не получаю это ни в каких других кодах, только в этом?:
C:UsersDavid>C:UsersDavidDesktopIN1900uke38qerror.py 1
File "C:UsersDavidDesktopIN1900uke38qerror.py", line 22
"""
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 24-25: truncated UXXXXXXXX escape
C:UsersDavid>
Мой код выглядит следующим образом:
from math import sqrt
import sys
a=float(sys.argv[1])
b=float(sys.argv[2])
c=float(sys.argv[3])
d=(b**2)-(4*a*c)
x1=((-b sqrt(d))/(2*a))
x2=((-b-sqrt(d))/(2*a))
print(f'The quadratic formula with used values gives two roots {x1:.1f} and {x2:.1f}')
#example
"""
#Fra command prompt:
#C:UsersDavid>C:UsersDavidDesktopIN1900uke38quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""
Комментарии:
1. Строки в тройных кавычках — это не комментарии, а многострочные строки. В Python комментарии начинаются с
#
.
Ответ №1:
Часть вашего строкового литерала интерпретируется как экранированный символ Юникода. Такие escape-последовательности начинаются с U
. Самое простое решение для этого — поставить r
перед открывающим триплетом двойных кавычек. Это предотвращает любую экранирующую обработку текста:
r"""
#Fra command prompt:
#C:UsersDavid>C:UsersDavidDesktopIN1900uke38quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""
Это намного проще, чем добавлять кучу дополнительных косых черт, и также не меняет удобочитаемость текста.
Вот что говорится в документах Python 3 о «необработанных строках»:
Литералы string и bytes могут необязательно иметь префикс буквы ‘r’ или ‘R’; такие строки называются необработанными строками и обрабатывают обратную косую черту как литеральные символы. В результате в строковых литералах экранирование ‘U’ и ‘ u’ в необработанных строках не обрабатывается специально. Учитывая, что необработанные литералы unicode в Python 2.x ведут себя иначе, чем в Python 3.x, синтаксис ‘ur’ не поддерживается.
Комментарии:
1. Это отключает большую часть escape-обработки для следующего строкового литерала. Смотрите следующее: docs.python.org/2.0/ref/strings.html — Обратите внимание, что тот факт, что это строка документа, не имеет никакого отношения к происходящему. Помещение
r
перед любым другим строковым литералом имеет тот же эффект.2. Я только что понял, что ссылка, которую я указал выше, действительно старая. Вот где вы можете прочитать об этом
r
в документах Python 3: docs.python.org/3/reference/lexical_analysis.html — смотрите выше, где я добавил соответствующую часть этой страницы к своему ответу.
Ответ №2:
Используйте двойные черные косые черты в строке с путем, вот так:
"""
"""
#Fra command prompt:
#C:\Users\David>C:\Users\David\Desktop\IN1900\uke38\quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker
"""
"""
Комментарии:
1. в качестве альтернативы вы можете поместить
r
перед строкой, чтобы прочитать ее какraw
строку, без специальных ` символов
Ответ №3:
U
Или u
в Users
и uke38
интерпретируется как экранирование в Юникоде. Удвойте обратную косую черту.
#C:\UsersDavid>C:\UsersDavidDesktopIN1900\uke38quadratic_roots_cml.py 1 0 -1
Кроме того, обратите внимание, что у вас есть комментарии в строках, начинающихся с #
. Итак, тройные кавычки не нужны.
...
print(f'The quadratic formula with used values gives two roots {x1:.1f} and {x2:.1f}')
#example
#Fra command prompt:
#C:UsersDavid>C:UsersDavidDesktopIN1900uke38quadratic_roots_cml.py 1 0 -1
#The quadratic formula with used values gives two roots 1.0 and -1.0
#(koden funker ikke på et eller annet magisk vis når jeg bruker