Наличие атрибута, равного «Нет», отличается от отсутствия такого атрибута вообще, если вы используете:
if row.total_bytes_processed is not None:
Python попытается получить доступ к атрибуту этого объекта, называемому «total_bytes_processed» и затем сравнивая его с None. Вы получаете эту ошибку, потому что в этом случае атрибут "total_bytes_processed" не существует для этого объекта.
Вы можете использовать метод "hasattr", указать объект и имя атрибута, который вы используете. ищите, как параметры, и метод вернет True, если параметр существует, и False в противном случае:
if hasattr(row, "total_bytes_processed"):
Имейте в виду, что hasattr все равно вернет True, даже если атрибут существует и равен «Нет». ", чтобы вы могли поставить его как и внешнюю проверку, а затем, после того как вы знаете, что атрибут существует, проверить, равен ли он" Нет ", и действовать соответственно. Это было бы что-то вроде:
for row in rows:
if hasattr(row, "total_bytes_processed"):
if row.total_bytes_processed is not None:
cost_dollars = (row.total_bytes_processed/1024 **4) *5
print( f"JOB_ID : {row.job_id} | Creation_Time : {row.creation_time} | Query: {row.query} | Total_Bytes_processed : {row.total_bytes_processed} | Estimated_Cost : ${cost_dollars}".format(
row.job_id, row.creation_time, row.query, row.total_bytes_processed,cost_dollars))
else:
row.total_bytes_processed = 0
cost_dollars = (int(row.total_bytes_processed) / 1024 ** 4) * 5
print(f"JOB_ID : {row.job_id} | Creation_Time : {row.creation_time} | Query: {row.query} | Total_Bytes_processed : {row.total_bytes_processed} | Estimated_Cost : ${cost_dollars}".format(row.job_id, row.creation_time, row.query, row.total_bytes_processed, cost_dollars))
else:
#code for when total_bytes_processed does not exists