TypeError: can only concatenate str (not "NoneType") to str python boto3
TypeError: can only concatenate str (not "NoneType") to str python boto3
我已经写下 python boto3 脚本来读取 json 文件。在阅读 json 文件时,我使用 argparse 添加了一些参数。调用脚本时,它抛出以下错误:
这是代码
#!/usr/bin/env python
import json
import sys
import os
import re
import boto3
import argparse
def init():
global pa
parser = argparse.ArgumentParser(description='Additional Params.')
parser.add_argument('--Tier', nargs='?', dest='Tier', required=False, help='Tier')
parser.add_argument('--BusinessUnit', nargs='?', dest='BusinessUnit', required=False, help='BusinessUnit')
parser.add_argument('--LineOfBusiness', nargs='?', dest='LineOfBusiness', required=False, help='LineOfBusiness')
parser.add_argument('--branchName', nargs='?', dest='branchName', required=False, help='branchName')
parser.add_argument('--ProjectName', nargs='?', dest='ProjectName', required=False, help='ProjectName')
parser.add_argument('--ContextPath', nargs='?', dest='ContextPath', required=False, help='ContextPath')
pa = parser.parse_args()
def update_secret():
init()
with open('application-' + pa.Tier + '.properties.json') as f:
baselist = json.load(f)
client = boto3.client('secretsmanager', region_name='us-east-1')
config_secret = get_secret()
for secrets in baselist:
response = client.update_secret(SecretId=pa.BusinessUnit + "/" + pa.LineOfBusiness + "/" + pa.ProjectName + "/" + pa.branchName + pa.ContextPath + "/" + 'application_' + pa.Tier, SecretString=baselist[secrets][1:])
print(response)
if __name__ == '__main__':
update_secret()
[Container] 2020/11/09 20:13:46 Running command python updateSecrets.py --Tier $Tier --BusinessUnit $BusinessUnit --LineOfBusiness $LineOfBusiness --ProjectName ProjectName --ContextPath $ContextPath --branchName $branchName
Traceback (most recent call last):
File "updateSecrets.py", line 81, in <module>
update_secret()
File "updateSecrets.py", line 30, in update_secret
with open('application-' + pa.Tier + '.properties.json') as f:
TypeError: can only concatenate str (not "NoneType") to str
您正在尝试将字符串与具有 None 值
的变量连接
with open('application-' + pa.Tier + '.properties.json') as f:
# pa.Tier returns None here
在传递命令行参数时,不要使用“$”符号作为值。 $ 不是必需的。下面是我写的用于测试的最少代码。
#!/usr/bin/env python
import argparse
def init():
global pa
parser = argparse.ArgumentParser(description='Additional Params.')
parser.add_argument('--Tier', nargs='?', dest='Tier', required=False, help='Tier')
pa = parser.parse_args()
def update_secret():
init()
print('application-' + pa.Tier + '.properties.json')
if __name__ == '__main__':
update_secret()
运行 以上程序,命令行参数如下。
python3 test.py --Tier abc
它在输出下方打印
application-abc.properties.json
我已经写下 python boto3 脚本来读取 json 文件。在阅读 json 文件时,我使用 argparse 添加了一些参数。调用脚本时,它抛出以下错误:
这是代码
#!/usr/bin/env python
import json
import sys
import os
import re
import boto3
import argparse
def init():
global pa
parser = argparse.ArgumentParser(description='Additional Params.')
parser.add_argument('--Tier', nargs='?', dest='Tier', required=False, help='Tier')
parser.add_argument('--BusinessUnit', nargs='?', dest='BusinessUnit', required=False, help='BusinessUnit')
parser.add_argument('--LineOfBusiness', nargs='?', dest='LineOfBusiness', required=False, help='LineOfBusiness')
parser.add_argument('--branchName', nargs='?', dest='branchName', required=False, help='branchName')
parser.add_argument('--ProjectName', nargs='?', dest='ProjectName', required=False, help='ProjectName')
parser.add_argument('--ContextPath', nargs='?', dest='ContextPath', required=False, help='ContextPath')
pa = parser.parse_args()
def update_secret():
init()
with open('application-' + pa.Tier + '.properties.json') as f:
baselist = json.load(f)
client = boto3.client('secretsmanager', region_name='us-east-1')
config_secret = get_secret()
for secrets in baselist:
response = client.update_secret(SecretId=pa.BusinessUnit + "/" + pa.LineOfBusiness + "/" + pa.ProjectName + "/" + pa.branchName + pa.ContextPath + "/" + 'application_' + pa.Tier, SecretString=baselist[secrets][1:])
print(response)
if __name__ == '__main__':
update_secret()
[Container] 2020/11/09 20:13:46 Running command python updateSecrets.py --Tier $Tier --BusinessUnit $BusinessUnit --LineOfBusiness $LineOfBusiness --ProjectName ProjectName --ContextPath $ContextPath --branchName $branchName
Traceback (most recent call last):
File "updateSecrets.py", line 81, in <module>
update_secret()
File "updateSecrets.py", line 30, in update_secret
with open('application-' + pa.Tier + '.properties.json') as f:
TypeError: can only concatenate str (not "NoneType") to str
您正在尝试将字符串与具有 None 值
的变量连接with open('application-' + pa.Tier + '.properties.json') as f:
# pa.Tier returns None here
在传递命令行参数时,不要使用“$”符号作为值。 $ 不是必需的。下面是我写的用于测试的最少代码。
#!/usr/bin/env python
import argparse
def init():
global pa
parser = argparse.ArgumentParser(description='Additional Params.')
parser.add_argument('--Tier', nargs='?', dest='Tier', required=False, help='Tier')
pa = parser.parse_args()
def update_secret():
init()
print('application-' + pa.Tier + '.properties.json')
if __name__ == '__main__':
update_secret()
运行 以上程序,命令行参数如下。
python3 test.py --Tier abc
它在输出下方打印
application-abc.properties.json