碰到了个特别奇怪的 Python 问题

39 天前
 xiaohundun
box = "\u2610"
check = "\u2611"

我在我的 py 文件里修改过这两个变量为 unicode ,然后我的文件就再也执行不了了,vscode 好像坏掉了

我尝试在文件头部加编码结果还是报错

# -*- mode: python -*-
# -*- coding: utf-8 -*-

报错

File "青浦.py", line 38
    msq = f"{item['通用名']}     {item['规格']}  x  {item['销售数量']}"
                                                                               ^
SyntaxError: invalid syntax

我如果不加编码就报错:

File "青浦.py", line 7
SyntaxError: Non-ASCII character '\xe7' in file 青浦.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

好无语啊,如果不在文件头部加编码,一会儿报错\xe7 一会又是 \xe2 \xe9 ,啊啊啊啊啊

1482 次点击
所在节点    Python
19 条回复
xiaohundun
39 天前
我就重启了下电脑,改了个 unicode 变量,就坏了,重启之前我还好好的执行着呢
xiaohundun
39 天前
发现是 vscode 问题,我在 terminal 里面执行是可以的。。
GeruzoniAnsasu
39 天前
首先 python3 不需要 encoding 的 header

然后,先检查你的 interpreter 选对了没,你很可能选到了 python2 作为 interpreter
再检查不可见字符,比如 BOM.
xiaohundun
39 天前
@GeruzoniAnsasu 大佬!你说的第一个我检查了下发现解释器不对,我的其他 terminal 都可以自动切换 conda 环境,但是 vscode 这里不会,用的确实是 python2 ,谢谢!
GeruzoniAnsasu
39 天前
另外 \xe7 \xe9 是常见的中文字符 utf8 编码序列的第一个字节,你应该对此建立点直觉。

p.s. \xe2 是 \u2610 这个符号的 utf8 编码序列的第一个字节
AS4694lAS4808
39 天前
用 notepad plus plus 打开,转码为 utf-8 无 bom ,再执行试试?
xiaohundun
39 天前
@GeruzoniAnsasu #5 好的多谢,我正在排查是什么导致 vscode 没有切换环境
woodfizky
39 天前
纯好奇,为啥 OP 同时装了 Python2 ?
xiaohundun
39 天前
@woodfizky mac 自带的吧
xiaohundun
39 天前
你们看我的 vscode ,无法切换环境= =

```
(base) ➜ Prescription_Generater which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
(base) ➜ Prescription_Generater conda activate base
(base) ➜ Prescription_Generater which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
(base) ➜ Prescription_Generater . /Users/xxx/anaconda3/bin/activate && conda activate /Users/xxx/anaconda3;
(base) ➜ Prescription_Generater which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
(base) ➜ Prescription_Generater
```
goodryb
39 天前
这种问题不如装个通义灵码,代码和报错都扔进去,直接出结果
AS4694lAS4808
39 天前
Terminal 的问题啊。。试试直接 source ~/miniconda3/etc/profile.d/conda.sh ,然后再 conda activate
xiaohundun
39 天前
@goodryb 我问过 gpt 让我加编码头的= =可能我没掌握方法吧
xiaohundun
39 天前
@AS4694lAS4808 #12 不行,

(base) ➜ Prescription_Generater source /Users/xxx/anaconda3/etc/profile.d/conda.sh
(base) ➜ Prescription_Generater conda activate base
(base) ➜ Prescription_Generater which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
(base) ➜ Prescription_Generater
GeruzoniAnsasu
39 天前
我没用过 conda ,但在 vscode 里是可以手动选 venv 的 interpreter 还是系统 interpreter 的

cmd + shift + p select python interpreter 试试
xiaohundun
39 天前
@GeruzoniAnsasu 这个也有问题 我选的是正确的解释器 但是我在执行脚本的时候环境还是错的
xiaohundun
39 天前
@GeruzoniAnsasu 总之就是无论如何切换不了
dorothyREN
39 天前
第一行 加个 #!/usr/bin/env python3
lolizeppelin
32 天前
dos2unix

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1031618

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX