lzb1001 发表于 2022-11-25 01:32:25

原始字符串的结尾处如果是反斜杠,方法1好像行不通,请大神指点

例如想表示D:\Program Files\Python 3.8\

由于Python 原始字符串中的反斜杠仍然会对引号进行转义,因此原始字符串的结尾处不能是反斜杠,否则字符串结尾处的引号会被转义,导致字符串不能正确结束。

>>> str1 = 'D:\Program Files\Python 3.8\'
SyntaxError: EOL while scanning string literal
>>> str1 = r'D:\Program Files\Python 3.8\'
SyntaxError: EOL while scanning string literal

在 Python 中有两种方式解决这个问题:

方式1:不要使用原始字符串,改用长字符串的写法;

>>> str1 = '''D:\Program Files\Python 3.8\'''
(重启IDLE)
>>> str1 = '''
D:\Program Files\Python 3.8\
'''
>>> print(str1)

D:\Program Files\Python 3.8 # 结尾缺少\

方式2:使用原始字符串,同时单独书写反斜杠---这是接下来要重点说明的。

1.str1 = r'D:\Program Files\Python 3.8' '\\'
2.print(str1)

我们先写了一个原始字符串r'D:\Program Files\Python 3.8',紧接着又使用'\\'写了一个包含转义字符的普通字符串,Python 会自动将这两个字符串拼接在一起,所以上面代码的输出结果是:

D:\Program Files\Python 3.8\

jackz007 发表于 2022-11-25 02:40:23

str1 = r'D:\Program Files\Python 3.8' + '\\'

lzb1001 发表于 2022-11-25 08:28:38

jackz007 发表于 2022-11-25 02:40


谢谢大神

(1)你的写法str1 = r'D:\Program Files\Python 3.8' + '\\',或我提到的str1 = r'D:\Program Files\Python 3.8' '\\'

经测试,以上两种都可实现print(str1)的输出结果为D:\Program Files\Python 3.8\

(2)方式1在http://c.biancheng.net/view/4227.html有提到,但作者并未列明代码,我自己测试好像行不通,不知道是否原文作者有误

tommyyu 发表于 2022-11-25 11:32:18

lzb1001 发表于 2022-11-25 08:28
谢谢大神

(1)你的写法str1 = r'D:\Program Files\Python 3.8' + '\\',或我提到的str1 = r'D:\Progr ...

那个不是为了将反斜杠写入字符串中,而是表示这一行的语句没有结束,和下一行语句是连在一起的。就比如,x = "hello"和x = "h\
ell\
o"的效果是一样的

阿奇_o 发表于 2022-11-25 14:08:12

本帖最后由 阿奇_o 于 2022-11-25 14:10 编辑

路径问题,担心拼接错误的,就尽量用 os.path.join(...)即可 。

结尾从反斜杠的问题,是因为 它先处理了 单引号成对与否的语法检查,而不是先处理 r-string 这个功能 。 (其实你加不加 r ,如果最后带一个反斜杠都会通不过语法检查)
反斜杠是"转义字符",escape ,反斜杠让紧接的 单引号,不再是匹配前面的单引号,而是其本身,作为字符串一部分。
所以它会报语法错误,说你unterminated string literal未正确终结文本字符, 就是因为它会先检查 引号,括号等这些成对的特殊符号 匹配语法。


页: [1]
查看完整版本: 原始字符串的结尾处如果是反斜杠,方法1好像行不通,请大神指点