当前位置: 首页 > news >正文

做海鲜团购网站网站紧急维护

做海鲜团购网站,网站紧急维护,amh wordpress 邮件,网站开发页面适应高度文章目录 前言1. 起因2. 调查3. 高能4. 释惑 前言 今天分享一件很诡异的事情,我写代码的时候遇到了不可见的字符!!! 1. 起因 今天在使用pipreqs导出项目中所依赖的库时突然报错了: pipreqs . --encodingutf-8 --forc…

文章目录

  • 前言
  • 1. 起因
  • 2. 调查
  • 3. 高能
  • 4. 释惑

前言

  今天分享一件很诡异的事情,我写代码的时候遇到了不可见的字符!!!

1. 起因

  今天在使用pipreqs导出项目中所依赖的库时突然报错了:

pipreqs . --encoding=utf-8 --force# 以下是报错信息
ERROR: Failed on file: ./build.py
Traceback (most recent call last):File "/usr/local/bin/pipreqs", line 8, in <module>sys.exit(main())File "/usr/local/lib/python3.8/dist-packages/pipreqs/pipreqs.py", line 528, in maininit(args)File "/usr/local/lib/python3.8/dist-packages/pipreqs/pipreqs.py", line 455, in initcandidates = get_all_imports(input_path,File "/usr/local/lib/python3.8/dist-packages/pipreqs/pipreqs.py", line 131, in get_all_importsraise excFile "/usr/local/lib/python3.8/dist-packages/pipreqs/pipreqs.py", line 117, in get_all_importstree = ast.parse(contents)File "/usr/lib/python3.8/ast.py", line 47, in parsereturn compile(source, filename, mode, flags,File "<unknown>", line 1# -*- coding:utf-8 -*-^
SyntaxError: invalid character in identifier

  直接来了SyntaxError#竟然是个无效字符,字符#表示十分的无辜,当事人表示十分的震惊!!!这不是离天下之大谱,滑天下之大稽吗???这就一行代码注释,能够错到哪里去!

在这里插入图片描述

2. 调查

  头一次遇到这种邪门的事情,我就查看了一下pipreqs 源码,代码很简单,我就摘取了报错的部分:

# pipreqs/pipreqs.py line 112
for file_name in files:file_name = os.path.join(root, file_name)with open(file_name, "r", encoding=encoding) as f:contents = f.read()try:tree = ast.parse(contents)	# 在这里报错了for node in ast.walk(tree):if isinstance(node, ast.Import):for subnode in node.names:raw_imports.add(subnode.name)elif isinstance(node, ast.ImportFrom):raw_imports.add(node.module)except Exception as exc:...

  意思也很好理解,pipreqs读取当前工程下的所有python文件,然后使用ast库进行语法分析,获取python文件所依赖的库名。既然这部分报错了,我就直接拿了出来,此时,我高度怀疑ast存在重大bug

3. 高能

  为了确认ast在解析文件时存在bug,我对当前工程下的所有python文件进行一一测试,然而,事情的发展却超出了我的预料:第二个文件(process_data.py)竟然能够可以解析!
  我看了下这个文件,开头也是一样的注释,然而却没有报错。难道是编码有问题?我打开了Pycharm看了一下,也没有问题:

在这里插入图片描述
  这也太诡异了吧,然后我又debug了一下,看下文件的内容,确定也没有问题:

在这里插入图片描述
  想不通了,于是问了下ChatGPT

在这里插入图片描述
  给出了四个怀疑点,基本都是一一排除了,python 3.8、文件为utf-8编码,无语法错误,注释也没有什么问题。但有一个点却无法理解:不可见的特殊字符?
  不可见?既然是个字符,即使不可见也得有位置吧。于是乎,最诡异的事情来了:

在这里插入图片描述
  还真的有一个空字符,在第一个位置,这。。。空字符还能占个位置?
  打印了一下ASCII,发现其值竟然是65279,空字符竟然有ASCII值,顿时觉得这个问题不简单,难道还真的不可见?

在这里插入图片描述

4. 释惑

  百度了一下发现,ASCII值为65279是因为文件采用UTF-8 BOM编码导致的,这是Windows环境下创建文件时默认的编码方式,对此还专门看了一下,还真是:

在这里插入图片描述
  这在Pycharm中也有这项设置,默认情况下在Pycharm中创建新文件时会采用UTF-8 with NO BOM编码,也就是常说的UTF-8,而之所以ast库有的能够正常解析文件有的却不可以,是可能有的文件不是在Pycharm中创建的,导致了这种诡异的时间发生了。同时,我用二进制的方式读了一下文件,发现前三个字节是\xEF\xBB\xBF,这也正是UTF-8 BOM编码时自动添加的。

py_file = './build.py'
with open(py_file, 'r', encoding='utf-8') as f:contents = f.read()if ord(contents[0]) == 65279:print('UTF-8 BOM')with open(py_file, 'rb') as f:contents = f.read(3)if contents == b'\xEF\xBB\xBF':print('UTF-8 BOM')# UTF-8 BOM
# UTF-8 BOM

  于是将文件编码由UTF-8 BOM改为UTF-8,问题就解决了!

在这里插入图片描述

http://www.yayakq.cn/news/174780/

相关文章:

  • 白云网站建设价格公司宣传片ppt模板
  • 360网站建设企业简述网站制作流程
  • 正规手表回收网站网站建设的经营范围
  • python 网站开发 linux海南创作什么网站
  • 凉山建设局网站“跨年”等关键词搜索达年内峰值
  • 备案服务网站免费网络验证
  • 镇江电子商务网站建设去哪里找做网站 的客户
  • 搜企业信息的网站推广策划案怎么写
  • 网站需要服务器吗?2024免费网站推广
  • 东莞企业网站优化四年级新闻摘抄大全
  • 优美网站源码秒火食品代理网
  • 通过付费网站做lead网站建设项目设计的图片
  • 北京网站建设 爱牛网页设计的实验总结
  • 常州建设网站软件下载网站 知乎
  • 上海知名的网站公司旅游网站设计模板
  • 网站建设技术协议书网站免费建设推荐
  • 网站制作二级网页怎么做小城镇建设的网站
  • 欧美做爰爰爰爰网站青海网站设计高端
  • 网站优化排名首页wordpress 主题在哪看
  • 网站做伪原创收录ppt主题模板下载免费
  • 马克斯网站建设小清新 wordpress
  • 手机网站欢迎页面设计专业网站制作公司名称
  • 怎么做自助提卡网站wordpress 底部页脚
  • 杭州专业做网站的公司有哪些深圳市营销型网站建设
  • 网上给别人做网站网站开发报价表模板
  • 图片做视频网站有哪些做网站首页文字排版技巧
  • 建设网站要多久普工招聘最新招聘信息
  • 浙江网站建设公司推荐专业做汽配的网站
  • 建设网站便宜谷歌网站推广报价
  • 成品软件源码网站大全什么网站可以做自考试题