2017-08-15 37 views
0

Ich verwende python3.5 und ich erstellen bigquery client über BigQuery Python (https://github.com/tylertreat/BigQuery-Python)Typeerror: initial_value muss str oder None, nicht Bytes (BigQuery)

Hier ist der Code:

from bigquery import get_client 

PROJECT_ID = 'api-project-xxxxxx' 
SERVICE_ACCOUNT = '[email protected]' 
PRIVATE_KEY_PATH = 'xxxx.p12' 

with open(PRIVATE_KEY_PATH, 'rb') as f: 
    private_key = f.read() 

client = get_client(PROJECT_ID,private_key=private_key,service_account=SERVICE_ACCOUNT,readonly=True) 

ich habe unten Fehler:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-181-858afcfa416a> in <module>() 
----> 1 client = get_client(PROJECT_ID,private_key=private_key,service_account=SERVICE_ACCOUNT,readonly=True) 
/Users/XXXXXX/.pyenv/versions/anaconda3-2.4.0/lib/python3.5/site-packages/bigquery/client.py in get_client(project_id, credentials, service_url, service_account, private_key, private_key_file, json_key, json_key_file, readonly, swallow_results) 
    131   credentials = _credentials().from_p12_keyfile_buffer(
    132    service_account, 
--> 133    StringIO(private_key), 
    134    scopes=scope) 
    135 
TypeError: initial_value must be str or None, not bytes 

Antwort

1

StringIO wandelt ein str Objekt in einen Strom. Sie müssen eine str übergeben, aber private_key ist ein Byte-Objekt, weil Sie die Datei im Binärmodus lesen. Versuchen Sie folgendes:

with open(PRIVATE_KEY_PATH, 'r') as f: 
    private_key = f.read() 

Der Rest des Codes gleich bleibt.

+0

danke für die Antwort. aber bekam einen anderen Fehler: 'UnicodeDecodeError: 'Ascii' Codec kann Byte 0x82 in Position 1 nicht decodieren: ordinal nicht im Bereich (128)' –

+0

@TsuyoshiEndo Das hat nichts damit zu tun. Kannst du eine andere Frage öffnen? –

+0

ok. Danke vielmals! Ich habe eine unkorrekte p12-Datei bestätigt. Also habe ich die korrekte Datei ohne Fehler verwendet. –

Verwandte Themen