使用python可能遇到的小问题

2022年8月26日 327点热度 0人点赞 0条评论

ImportError: No module named '自定义函数'

现象:使用命令行运行程序包中的某个文件,会出现类似如下报错

$ python tests/test_utils.py
Traceback (most recent call last): File "tests/test_utils.py", line 7, in <module> from run_api import appImportError: No module named 'run_api'

解决办法:添加程序根目录到 PYTHONPATH 变量中

# 进入到程序根目录$ export PYTHONPATH=.# windows 环境执行:set PYTHONPATH=.
# 然后执行相关命令$ python tests/test_utils.py

Windows环境某些情况下转码异常

现象:在Windows下的CMD执行正常,但是在第三方系统提供的console中执行有类似如下报错

  UnicodeEncodeError
'gbk' codec can't encode character '\xa0' in position 22: illegal multibyte sequence
at F:\Program Files\Python39\lib\site-packages\clikit\io\output_stream\stream_output_stream.py:24 in write 20│ """ 21│ if self.is_closed(): 22│ raise io.UnsupportedOperation("Cannot write to a closed input.") 23│ → 24│ self._stream.write(string) 25│ self._stream.flush() 26│ 27│ def flush(self): # type: () -> None 28│

解决办法:在执行命令之前配置变量 PYTHONIOENCODING=utf-8

# 进入到程序根目录$ PYTHONIOENCODING=utf-8# windows 环境执行:set PYTHONIOENCODING=utf-8
# 然后执行相关命令$ poetry help

使用 subprocess 模块操作svn报认证失败的错误

现象:直接使用命令行操作svn没有问题,使用python操作svn命令有类似如下报错

svn: E215004: No more credentials or we tried too many times.Authentication failed

解决办法:在svn命令行使用 --username --password --no-auth-cache 参数


在Windows下使用 shutil.rmtree 删除目录报权限错误

现象:执行 shutil.rmtree(path) 有类似如下报错

WindowsError: [Error 5] Access is denied: 'build\\tcl\\tcl8.5\\msgs\\af.msg'

一般情况是因为该文件具有只读属性造成的,解决办法:添加onerror方法

import osimport statimport shutil
def remove_readonly(func, path, excinfo): os.chmod(path, stat.S_IWRITE) func(path)
shutil.rmtree(top, onerror=remove_readonly)

Windows下批量去除目录的只读属性

def remove_windows_readonly(path: Union[str, list]):    if isinstance(path, str):        path = [path]    if isinstance(path, list):        for i in path:            subprocess.run(f"attrib -R {i}/* /S /D")

如果被装饰器修饰的函数具有返回值,一定要在装饰器上同时返回,否则后续调用该函数是无法获取返回值的

81300使用python可能遇到的小问题

这个人很懒,什么都没留下

文章评论