我发现访问dict密钥更加方便,obj.foo而不是obj['foo'],所以我写了这个代码片段:
class AttributeDict(dict):
def __getattr__(self, attr):
return self[attr]
def __setattr__(self, attr, value):
self[attr] = value
Run Code Online (Sandbox Code Playgroud)
但是,我认为必须有一些原因,Python不提供开箱即用的功能.以这种方式访问dict密钥有什么警告和陷阱?
我不在乎,如果是JSON,pickle,YAML,或什么的.
我见过的所有其他实现都不是向前兼容的,所以如果我有一个配置文件,在代码中添加一个新密钥,然后加载该配置文件,它就会崩溃.
有没有简单的方法来做到这一点?
通常,我按如下方式编码,以获取变量中的特定项目,如下所示
try:
config = ConfigParser.ConfigParser()
config.read(self.iniPathName)
except ConfigParser.MissingSectionHeaderError, e:
raise WrongIniFormatError(`e`)
try:
self.makeDB = config.get("DB","makeDB")
except ConfigParser.NoOptionError:
self.makeDB = 0
Run Code Online (Sandbox Code Playgroud)
有没有办法读取python字典中的所有内容?
例如
[A] x=1 y=2 z=3 [B] x=1 y=2 z=3
被写入
val["A"]["x"] = 1 ... val["B"]["z"] = 3
我正在尝试编写一个 python 脚本,该脚本使用 watchdog 来查找文件创建并使用 boto3 将其上传到 s3。但是,我的 boto3 凭据每 12 小时就会过期,因此我需要更新它们。我将我的 boto3 凭据存储在~/.aws/credentials. 所以现在我正在尝试捕获S3UploadFailedError、更新凭据并将它们写入~/.aws/credentials. 但是,尽管凭证正在更新,但我boto3.client('s3')再次调用它的抛出异常。
我究竟做错了什么?或者我该如何解决?
下面是代码片段
try:
s3 = boto3.client('s3')
s3.upload_file(event.src_path,'bucket-name',event.src_path)
except boto3.exceptions.S3UploadFailedError as e:
print(e)
get_aws_credentials()
s3 = boto3.client('s3')
Run Code Online (Sandbox Code Playgroud) 我无法找到一种方法如何使用beeve.iniApiClient的值来初始化我的context.config.userdata['url']
行为.ini
[behave.userdata]
url=http://some.url
Run Code Online (Sandbox Code Playgroud)
步骤.py
from behave import *
from client.api_client import ApiClient
# This is where i want to pass the config.userdata['url'] value
api_calls = ApiClient('???')
@given('I am logged as "{user}" "{password}"')
def login(context, user, password):
context.auth_header = api_calls.auth(user, password)
Run Code Online (Sandbox Code Playgroud)
api_client.py
class ApiClient(object):
def __init__(self, url):
self.url = url
def auth(self, email, password):
auth_payload = {'email': email, 'password': password}
auth_response = requests.post(self.url + '/api/auth/session', auth_payload)
return auth_response.text
Run Code Online (Sandbox Code Playgroud) python ×4
ini ×2
boto3 ×1
config ×1
dictionary ×1
json ×1
python-2.7 ×1
python-3.x ×1
settings ×1
syntax ×1