Sending Email using AWS SES error "TypeError: 'str' object is not callable"

Sending Email using AWS SES error "TypeError: 'str' object is not callable"

我想通过 aws ses 发送电子邮件并得到以下输出:print(result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated'])

但是我得到一个错误TypeError: 'str' object is not callable

#!/usr/bin/env python3

import argparse
import boto3
import datetime

parser = argparse.ArgumentParser()
parser.add_argument('--days', type=int, default=1)
args = parser.parse_args()


now = datetime.datetime.utcnow()
start = (now - datetime.timedelta(days=args.days)).strftime('%Y-%m-%d')
end = now.strftime('%Y-%m-%d')

cd = boto3.client('ce', 'us-west-2')

results = []

token = None
while True:
    if token:
        kwargs = {'NextPageToken': token}
    else:
        kwargs = {}
    data = cd.get_cost_and_usage(TimePeriod={'Start': start, 'End':  end}, Granularity='DAILY', Metrics=['UnblendedCost'], GroupBy=[{'Type': 'DIMENSION', 'Key': 'LINKED_ACCOUNT'}, {'Type': 'DIMENSION', 'Key': 'SERVICE'}],Filter={'Dimensions': {'Key': 'SERVICE','Values': ['AWS Lambda']}}, **kwargs)
    results += data['ResultsByTime']
    token = data.get('NextPageToken')
    if not token:
        break

print('\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated']))
for result_by_time in results:
    for group in result_by_time['Groups']:
        amount = group['Metrics']['UnblendedCost']['Amount']
        unit = group['Metrics']['UnblendedCost']['Unit']
        print(result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated'])

client = boto3.client('ses', 'us-west-2')

responses = client.send_email(
    Source='noreply@sample.com',
    Destination={
        'ToAddresses': [
            'sample@sample.com',
        ]
    },
    Message={
        'Subject': {
            'Data': 'Lambda Billing Alarm',
            'Charset': 'UTF-8',
        },
        'Body': {
            'Html': {
                'Data': ('\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated']))
                (result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated']),
                'Charset': 'UTF-8',               
                }
            }
        }
    )

我希望在电子邮件中有这样的输出:

ses output

谢谢!

这里有一些错位的括号

  'Data': ('\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated']))
  (result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated']),
            'Charset': 'UTF-8',               
            }

请注意以下片段中的问题:'Estimated']))(result_by_time

基本上您的代码尝试执行的是以下 (<some_string>)(arguments),其中 <some_string>\t'.join(['TimePeriod', 'LinkedAccount', 'Service', 'Amount', 'Unit', 'Estimated'])。随后你试图调用一个字符串,解释你的错误:

“TypeError: 'str' object is not callable”

也许你的 Data 应该是:

  'Data': '\t'.join([result_by_time['TimePeriod']['Start'], '\t', '\t'.join(group['Keys']), '\t', amount, '\t', unit, '\t', result_by_time['Estimated'])