class WorkingDirectory(contextlib.ContextDecorator): # 改变函数的工作路径
# Usage: @WorkingDirectory(dir) decorator or 'with WorkingDirectory(dir):' context manager
def __init__(self, new_dir):
self.dir = new_dir # new dir
self.cwd = Path.cwd().resolve() # current dir
def __enter__(self):
os.chdir(self.dir)
def __exit__(self, exc_type, exc_val, exc_tb):
os.chdir(self.cwd)
def try_except(func):
# try-except function. Usage: @try_except decorator
def handler(*args, **kwargs):
try:
func(*args, **kwargs)
except Exception as e:
print(e)
return handler
WorkingDirectory类用来控制函数的运行路径如下例子所示
from posixpath import normpath
from cv2 import trace
from utils.general import check_git_status,WorkingDirectory, try_except
from pathlib import Path
import os
FILE = Path(__file__).resolve()
ROOT = FILE.parents[1] # YOLOv5 root directory
@try_except
@WorkingDirectory(r'E:\thesis')
def func():
print('func')
print(os.getcwd())
func()
WorkingDirectory作为装饰器,可以传入一个路径参数用来指定当前函数的工作路径,不指定的话就在当前路径,try_except也是装饰器,用来接收异常,不让程序在该函数出现异常时停止。