почему использование "\" показывает ошибку в Jython - PullRequest
4 голосов
/ 21 июня 2010

Я пытаюсь использовать команду копирования для Windows, и у нас есть каталоги, такие как c:\oracle.

При попытке выполнить одну такую ​​ошибку мы получаем следующую ошибку:

source_file=folder+"\"
                          ^
SyntaxError: Lexical error at line 17, column 23.  Encountered: "\r" (13), after : ""

Здесь папка - мой путь к c: \ oracle, и при попытке добавить в нее файл, например:

source=folder+"\"+src_file

Я не могу этого сделать. Любое предложение о том, как решить эту проблему?

Я пытался с /, но мои окна копирования, вызывающие источник в os.command, получают "the syntax is incorrect", и единственный способ решить эту проблему - использовать \, но я получаю вышеуказанную ошибку при этом. *

Пожалуйста, предложите. Спасибо за вашу помощь

Спасибо.

Ответы [ 3 ]

8 голосов
/ 21 июня 2010

Краткий ответ:

Вам нужно:

source_file = folder + "\\" + src_file

Длинный ответ:

Проблема с

source_file = folder + "\" + src_file

означает, что \ является escape-символом. В данном конкретном случае он экранирует ", так что он рассматривается как символ строки, а не как терминатор строки, подобно:

source_file = folder + "X + src_file

с такой же проблемой.

Другими словами, вы пытаетесь создать строку, состоящую из ", некоторого другого текста и конца строки (\r, символ возврата каретки). Вот откуда ваша ошибка:

Encountered: "\r" (13)
3 голосов
/ 21 июня 2010

Паксдиабло абсолютно прав, почему \ не работает для вас. Тем не менее, вы также можете решить свою проблему, используя os.path.normpath вместо того, чтобы пытаться самостоятельно создавать правильные символы пути для конкретной платформы.

1 голос
/ 21 июня 2010

На всех известных мне языках программирования вы не можете поместить кавычку в строку, подобную этой: "this is a quote: "." Причина этого в том, что первая кавычка открывает строку, вторая затем закрывает ее (!), И затем третий открывает еще одну строку - со следующими двумя проблемами:

  • все, что находится между кавычками # 2 и # 3, вероятно, не является допустимым кодом;
  • цитата № 3, вероятно, не закрывается.

Существует два распространенных механизма решения этого: удвоение и побег. Экранирование встречается гораздо чаще, и это означает, что вы помещаете специальный символ (обычно \) перед символами, которые не нужно интерпретировать в их обычном значении. Таким образом, "no, *this* is a quote: \"." является правильной строкой, где кавычка # 2 не закрывает строку - и символ \ не появляется.

Однако теперь у вас есть другая проблема - как вы на самом деле заставляете escape-символ появляться в строке? Просто: убеги! "This is an escape: \\!" это то, как вы это делаете: обратная косая черта # 1 - это escape-символ, а обратная косая черта # 2 - escape-символ: он не будет интерпретироваться с его обычной escape-семантикой, а как простой символ обратной косой черты.

Таким образом, ваша строка должна сказать следующее:

source=folder+"\\"+src_file

Кстати: upvote как для @paxdiablo (который входил до моей диатрибы), так и для @Nick (у которого есть правильный Pythonic способ сделать то, что вы хотите сделать)

...