改进python函数以解析Wordpress/config.php的建议
我正在编写一个python脚本函数来备份Wordpress。作为脚本的一部分,我编写了一个从config.php文件获取数据库详细信息的函数 我的职能运作 函数以Wordpress安装位置为参数,使用正则表达式匹配该文件中的db_用户、db_主机、db_用户、db_密码,如果找不到“config.php”,则函数将存在我正在使用sys.exit(1)退出函数,这是退出函数的正确方法吗?我正在粘贴函数代码片段改进python函数以解析Wordpress/config.php的建议,python,python-2.7,python-3.x,function,Python,Python 2.7,Python 3.x,Function,我正在编写一个python脚本函数来备份Wordpress。作为脚本的一部分,我编写了一个从config.php文件获取数据库详细信息的函数 我的职能运作 函数以Wordpress安装位置为参数,使用正则表达式匹配该文件中的db_用户、db_主机、db_用户、db_密码,如果找不到“config.php”,则函数将存在我正在使用sys.exit(1)退出函数,这是退出函数的正确方法吗?我正在粘贴函数代码片段 def parsing_db_info(location): config_pa
def parsing_db_info(location):
config_path = os.path.normpath(location+'/config.php')
if os.path.exists(config_path):
try:
regex_db = r'define\(\s*?\'DB_NAME\'\s*?,\s*?\'(.*?)\'\s*?'.group(1)
regex_user = r'define\(\s*?\'DB_USER\'\s*?,\s*?\'(.*?)\'\s*?'.group(1)
regex_pass = r'define\(\s*?\'DB_PASSWORD\'\s*?,\s*?\'(.*?)\'\s*?'.group(1)
regex_host = r'define\(\s*?\'DB_HOST\'\s*?,\s*?\'(.*?)\'\s*?'.group(1)
db_name = re.match(regex_db,config_path).group(1)
db_user = re.match(regex_user,config_path).group(1)
db_pass = re.match(regex_pass,config_path).group(1)
db_host = re.match(regex_host,config_path).group(1)
return {'dbname':db_name , 'dbuser':db_user , 'dbpass':db_pass , 'dbhost':db_host}
except exception as ERROR:
print(ERROR)
sys.exit(1)
else:
print('Not Found:',config_path)
sys.exit(1)
编辑后
def parsing_db_info(location):
config_path = os.path.normpath(location+'/wp-config.php')
try:
with open(config_path) as fh:
content = fh.read()
regex_db = r'define\(\s*?\'DB_NAME\'\s*?,\s*?\'(.*?)\'\s*?'
regex_user = r'define\(\s*?\'DB_USER\'\s*?,\s*?\'(.*?)\'\s*?'
regex_pass = r'define\(\s*?\'DB_PASSWORD\'\s*?,\s*?\'(.*?)\'\s*?'
regex_host = r'define\(\s*?\'DB_HOST\'\s*?,\s*?\'(.*?)\'\s*?'
db_name = re.search(regex_db,content).group(1)
db_user = re.search(regex_user,content).group(1)
db_pass = re.search(regex_pass,content).group(1)
db_host = re.search(regex_host,content).group(1)
return {'dbname':db_name , 'dbuser':db_user , 'dbpass':db_pass , 'dbhost':db_host}
except FileNotFoundError:
print('File Not Found,',config_path)
sys.exit(1)
except PermissionError:
print('Unable To read Permission Denied,',config_path)
sys.exit(1)
except AttributeError:
print('Parsing Error wp-config seems to be corrupt,')
sys.exit(1)
为了回答您的问题,您通常不应该在这样的函数中使用
sys.exit
。相反,让它在失败时引发异常。最好是一个异常,详细说明发生了什么错误,或者您可以让现有的异常传播
Python中的一般规则是:在您知道如何处理异常的地方处理异常
在代码中,您捕获到一个异常,然后不知道该做什么,因此调用sys.exit
。与此相反,您应该:
sys.exit
(如果合适)ConfigFileNotFound
异常或ConfigFileUnparseable
异常另外,您已经放置了
除异常
,您的意思可能是除异常
。然而,这是非常广泛的,并将掩盖其他编程错误。相反,捕获您期望的特定异常类。这可能应该发布在我正在使用的“足够好”上。谢谢,效果很好。我已经根据您的建议更改了所有代码。@FujiClado这在捕获特定异常方面是一个很大的改进。如果您的函数只在脚本中的一个位置使用,并且是一个简单的脚本,那么像这样使用sys.exit
就可以了。如果希望此函数更具可重用性,则不应使用sys.exit
,而应引发自定义异常,并在调用parsing\u db\u info