繁体   English   中英

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

[英]AttributeError: 'Namespace' object has no attribute 'url'

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

Traceback (most recent call last):
  File "C:\Users\sanja\Desktop\Mongo backup.py", line 76, in <module>
    backup(args)
  File "C:\Users\sanja\Desktop\Mongo backup.py", line 25, in backup
    url = args.url
AttributeError: 'Namespace' object has no attribute '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)

使用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')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM