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

2024-04-11 13:49:04 +08:00
 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 ,啊啊啊啊啊

1959 次点击
所在节点    Python
19 条回复
xiaohundun
2024-04-11 13:49:32 +08:00
我就重启了下电脑,改了个 unicode 变量,就坏了,重启之前我还好好的执行着呢
xiaohundun
2024-04-11 13:54:30 +08:00
发现是 vscode 问题,我在 terminal 里面执行是可以的。。
GeruzoniAnsasu
2024-04-11 13:57:05 +08:00
首先 python3 不需要 encoding 的 header

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

p.s. \xe2 是 \u2610 这个符号的 utf8 编码序列的第一个字节
AS4694lAS4808
2024-04-11 14:05:28 +08:00
用 notepad plus plus 打开,转码为 utf-8 无 bom ,再执行试试?
xiaohundun
2024-04-11 14:06:36 +08:00
@GeruzoniAnsasu #5 好的多谢,我正在排查是什么导致 vscode 没有切换环境
woodfizky
2024-04-11 14:09:49 +08:00
纯好奇,为啥 OP 同时装了 Python2 ?
xiaohundun
2024-04-11 14:10:09 +08:00
@woodfizky mac 自带的吧
xiaohundun
2024-04-11 14:11:59 +08:00
你们看我的 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
2024-04-11 14:18:22 +08:00
这种问题不如装个通义灵码,代码和报错都扔进去,直接出结果
AS4694lAS4808
2024-04-11 14:20:05 +08:00
Terminal 的问题啊。。试试直接 source ~/miniconda3/etc/profile.d/conda.sh ,然后再 conda activate
xiaohundun
2024-04-11 14:20:38 +08:00
@goodryb 我问过 gpt 让我加编码头的= =可能我没掌握方法吧
xiaohundun
2024-04-11 14:22:18 +08:00
@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
2024-04-11 14:24:21 +08:00
我没用过 conda ,但在 vscode 里是可以手动选 venv 的 interpreter 还是系统 interpreter 的

cmd + shift + p select python interpreter 试试
xiaohundun
2024-04-11 14:28:18 +08:00
@GeruzoniAnsasu 这个也有问题 我选的是正确的解释器 但是我在执行脚本的时候环境还是错的
xiaohundun
2024-04-11 14:29:22 +08:00
@GeruzoniAnsasu 总之就是无论如何切换不了
dorothyREN
2024-04-11 16:47:35 +08:00
第一行 加个 #!/usr/bin/env python3
lolizeppelin
2024-04-18 14:35:30 +08:00
dos2unix

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

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

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

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

© 2021 V2EX