код Python работает на локальном, не работает в Ubuntu AWS, форматирование F-строки - PullRequest
0 голосов
/ 17 октября 2019

У меня есть код, который отлично работает на моем локальном компьютере, но говорит, что есть проблема с моим форматированием f-строки:

def get_coordinates(row, df):
    try:
        row_ra = df['ra_deg'].iloc[row]
        row_dec = df['dec_deg'].iloc[row]
        return [row_ra, row_dec]
    except KeyError:
        try:
            row_ra = df['ra'].iloc[row]
            row_dec = df['dec'].iloc[row]
            return [row_ra, row_dec]
        except KeyError:
            try:
                row_ra = df['ra'].iloc[row]
                row_dec = df['decl'].iloc[row]
                return [row_ra, row_dec]
            except KeyError:
                pass

def circle_intercepts(r, radius):
    ra_pos = r[0] + radius
    dec_pos = r[1] + radius
    ra_neg = r[0] - radius
    dec_neg = r[1] - radius
    return [ra_neg, ra_pos, dec_neg, dec_pos]

import pandas as pd
from astropy import units as u
from simbad_functions import get_coordinates
from simbad_functions import circle_intercepts
import psycopg2
import os
import pandas.io.sql as sqlio
from astropy.coordinates import SkyCoord
import datetime

environment = os.getenv('STARDB')
conn = psycopg2.connect(environment)
cur = conn.cursor()

simbad = pd.read_csv('simbad_data.csv')
half_arc_second = 1.39 * 10 ** -4
table = 'gaia_data_1'
ra = 'ra'
dec = 'dec'

n = len(simbad)
match_list = []
degrees = 1
start = datetime.datetime.now()

f = open("match_list.txt","w+")

print(datetime.datetime.now())
for i in range(n):
    ri = get_coordinates(i, simbad)
    ri_intercepts = circle_intercepts(ri, degrees)

    table = 'gaia_data_1'
    ra = 'ra'
    dec = 'dec'

    sql_query = ('select ' 
                 f'{ra}, {dec} ' 
                 'from ' 
                 f'{table} ' 
                 'where ' 
                 f'ra between {ri_intercepts[0]} and {ri_intercepts[1]} and ' 
                 f'dec between {ri_intercepts[2]} and {ri_intercepts[3]} '
                 )

    pts_in_square_on_ri = sqlio.read_sql_query(sql_query, conn)

    catalog = SkyCoord(
        ra=pts_in_square_on_ri['ra'] * u.degree,
        dec=pts_in_square_on_ri['dec'] * u.degree,
        frame='icrs'
    )

    ri_ra = [simbad['ra_deg'].iloc[i]]
    ri_dec = [simbad['dec_deg'].iloc[i]]

    ri = SkyCoord(
        simbad['ra_deg'].iloc[i] * u.deg,
        simbad['dec_deg'].iloc[i] * u.deg,
        frame='icrs'
    )
    idx, d2d, d3d = ri.match_to_catalog_sky(catalog)
    matches = catalog[idx]
    match_list.append(matches)
    f.write(str(matches))

print(datetime.datetime.now() - start)
f.close

ошибка, которую я получаю в AWS:

File "fetch_gaia_features.py", line 45
    f'{ra}, {dec} '
    ^
SyntaxError: invalid syntax
  File "fetch_gaia_features.py", line 45
    f'{ra}, {dec} '
    ^
SyntaxError: invalid syntax
  File "fetch_gaia_features.py", line 45
    f'{ra}, {dec} '
    ^
SyntaxError: invalid syntax
  File "fetch_gaia_features.py", line 45
    f'{ra}, {dec} ' +
                  ^
SyntaxError: invalid syntax
  File "fetch_gaia_features.py", line 46
    f'{ra}, {dec} ' 
    ^
SyntaxError: invalid syntax
  File "fetch_gaia_features.py", line 45
    f'{ra}, {dec} ' 
    ^
SyntaxError: invalid syntax

Код отлично работает на моем локальном терминале и в ноутбуках Jupyter на моем компьютере. С терминала ec2 Ubuntu я получаю эту ошибку. То, что я пытаюсь сделать, - это использовать каталог, который я собрал с данными из simbad, и искать ближайшую вещь к координатам в моем списке из базы данных Gaia. Кто-нибудь понимает, почему Ubuntu реагирует таким образом на f-струны? Есть ли способ использовать f-строки в Ubuntu, который не конфликтует? Это проблема с библиотекой или обновлением?

...