AttributeError:“名称空间”对象没有属性“ URL”

时间:2019-01-08 10:55:19

标签: python-2.7

我每天都有python代码来备份mongodb,但出现属性错误。错误详细信息如下。

回溯(最近通话最近):   文件“ C:\ Users \ sanja \ Desktop \ Mongo backup.py”,第76行,在     备用(参数)   备份中的文件“ C:\ Users \ sanja \ Desktop \ Mongo backup.py”,第25行     网址= args.url AttributeError:“名称空间”对象没有属性“ URL”

 import os
 import argparse
 import logging
 import datetime
 import urlparse
 import subprocess

    logging.basicConfig(level=logging.INFO)

    parser = argparse.ArgumentParser(description='Backup Mongolab DBs')
    parser.add_argument('-u', '--url mongodb://192.168.32.11:27017/test',
    type=str,
    required=False,
    default=None,
    help='Mongo DB URL for Backups')
    parser.add_argument('-o', '--output_dir F:\\DB_backup',
    type=str,
    required=False,
    default='./',
    help='Output directory for the backup.')

def backup(args):
today = datetime.datetime.now()

url = args.url

if url is None:
    logging.info('Fetching MONGOLAB_URI using heroku config:get')

    url = subprocess.check_output([
            'heroku',
            'config:get',
            'MONGOLAB_URI'
            ]).strip()

url = urlparse.urlparse(url)
assert url.scheme == 'mongodb', 'mongodb://192.168.32.11:27017/test'

# netloc = url.netloc
# username = url.username
# password = url.password
hostname = url.hostname
port = url.port
db = url.path[1:]

output_dir = os.path.abspath(os.path.join(
        os.path.curdir,
        args.output_dir))

assert os.path.isdir(output_dir), 'Directory %s can\'t be found.' % 
output_dir

output_dir = os.path.abspath(os.path.join(output_dir,
        '%s__%s'% ( db, today.strftime('%Y_%m_%d_%H%M%S'))
        ))

logging.info('Backing up %s from %s to %s' % (db, hostname, output_dir))

backup_output = subprocess.check_output(
        [
            'mongodump',
            '-host 192.168.32.11', '%s' % hostname,
            # '-u', '%s' % username,
            # '-p', '%s' % password,
            '-d test', '%s' % db,
            '--port 27017', '%s' % port,
            '-o F:\\DB_backup', '%s' % output_dir
        ])
logging.info(backup_output)
if __name__ == '__main__':
args = parser.parse_args()

try:
    backup(args)
except AssertionError, msg:
    logging.error(msg)

1 个答案:

答案 0 :(得分:0)

使用argparse时出现错误

AttributeError: 'Namespace' object has no attribute 'property'

表示property参数中未定义args。在这种情况下,您希望定义一个名称为url的参数,但是请查看您的代码:

parser.add_argument('-u', '--url mongodb://192.168.32.11:27017/test', ...

您创建了一个名为'--url mongodb://192.168.32.11:27017/test'的属性。您的声明应为:

parser.add_argument('-u', '--url', ...

您不能在声明中添加值;也许您是想定义一个默认值?

parser.add_argument('-u', '--url',
                    type=str,
                    required=False,
                    default='mongodb://192.168.32.11:27017/test',
                    help='Mongo DB URL for Backups')

定义的其他参数也是如此。