sys模块
一、sys模块
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
方法 | 详解 |
---|---|
sys.argv | 命令行参数List,第一个元素是程序本身路径 |
sys.modules.keys() | 返回所有已经导入的模块列表 |
sys.exc_info() | 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息 |
sys.exit(n) | 退出程序,正常退出时exit(0) |
sys.hexversion | 获取Python解释程序的版本值,16进制格式如:0x020403F0 |
sys.version | 获取Python解释程序的版本信息 |
sys.maxint | 最大的Int值 |
sys.maxunicode | 最大的Unicode值 |
sys.modules | 返回系统导入的模块字段,key是模块名,value是模块 |
sys.path | 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 |
sys.platform | 返回操作系统平台名称 |
sys.stdout | 标准输出 |
sys.stdin | 标准输入 |
sys.stderr | 错误输出 |
sys.exc_clear() | 用来清除当前线程所出现的当前的或最近的错误信息 |
sys.exec_prefix | 返回平台独立的python文件安装的位置 |
sys.byteorder | 本地字节规则的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’ |
sys.copyright | 记录python版权相关的东西 |
sys.api_version | 解释器的C的API版本 |
'gbk' codec can't encode character '\ufffd' in position 1636: illegal multibyte sequence
有的Windows系统下,执行print会报错'gbk' codec can't encode character '\ufffd' in position 1636: illegal multibyte sequence
,这个意思是gbk编码解码了一串字符串,但这个字符串的编码不是gbk的,导致编码不同解不开而报的错。
什么原因呢,这里首先要说明下,Windows系统的默认字符编码是gbk,如果你的数据是utf-8的话,就会导致报错。并且这个报错是偶然的,并不是所有Windows电脑都会遇到。
那么在print中报这个错,是因为print内部调用了stdout来输出打印结果的,这个stdout输出打印结果时,使用的编码调用了系统的默认编码,也就是gbk,进而导致gbk编码无法解码UTF-8的字符串。
如果你的代码报了上面的错误,那么你可以在报错代码之前打印下此时stdout使用的编码:
import sys
print(sys.stdout.encoding) # gbk
那么解决方案就是,将stdout的编码调整为utf-8编码:
import sys
# 调整之前
# print(1111, sys.stdout.encoding) # gbk
sys.stdout.reconfigure(encoding='utf-8') # 指定print输出的字符编码
# 调整之后
# print(sys.stdout.encoding) # utf-8
你只需要将上面的两行代码放到你报错代码执行之前的某个位置,就行了。