Python r”\" SyntaxError 问题分析

    这是前几天偶尔碰到的问题, 发现跟自己的对python理解不一致, 于是网上搜了下, 说是Python的Bug, 正好最近在看python源码, 于是就通过源码分析了下.     

    1. 首先,说下问题:

    "\"在python字符串中算特殊字符, 起转义作用, \n转义n变回车, \\转义\等等,这个应该没啥问题. 那么正常情况下a="\" 是存在语法问题, 因为\转义了右边的",所以字符串少一个右括号,错误原因很明显了. 但是,python(很作死的)有个r操作符(全称 原始字符串操作符), 就是对字符串内的内容按字面意思解析,不做特殊处理,所以如果a=r"\n" 输出的就是"\\n",而不是回车,为什么是"\\", goto 1 再看看. 那么现在问题来了, 按r的功能, a=r"\", 应该没问题,因为在r的场子里,\是不能转义",但是现在还是给你一个语法错误,syntaxError.

    2. 然后,我想说:

    其实我刚才说错了, 这不是一个语法错误, 这tmd是个词法错误.(略装B的说法,语法词法概念模糊的可以网上稍微看下). 为什么这么说, 跟了下python的源码,发现问题出在Parser\tokenizer.c内, python对字符串对象的词法解析部分.代码如下:

 

<p>/* String */</p><p><span style="font-family:宋体;font-size:14px;">letter_quote:</span>
	if (c == '\'' || c == '"') {
		Py_ssize_t quote2 = tok->cur - tok->start + 1;
		int quote = c;
		int triple 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值