簡體   English   中英

SyntaxError:語法無效( <string> )

[英]SyntaxError: invalid syntax (<string>)

我有python 2.7,並且我有返回溫度信息的天氣腳本,我想將此腳本實現到PostgreSQL中。 我總是收到此錯誤: DETAIL: SyntaxError: invalid syntax (<string>, line 10)

碼:

    CREATE OR REPLACE FUNCTION GetWeather(lon float, lat float)
    RETURNS float
    AS $$
    import urllib2
    import simplejson as json

    data = urllib2.urlopen(
    "http://api.openweathermap.org/data/2.1/find/station?lat=%s&lon=%s&cnt=1"% (lat, lon))
    js_data = json.load(data)
    if js_data['cod'] == '200': 
    if int(js_data['cnt'])>0: 
    station = js_data['list'][0] 
    print 'Data from weather station %s' %station['name']
    if 'main' in station: 
    if 'temp' in station['main']: 
    temperature = station['main']['temp'] - 273.15 
    else:temperature = None
    else:temperature = None

    return temperature

    $$ LANGUAGE plpythonu;

我也嘗試過此版本,但無法正常工作

CREATE OR REPLACE FUNCTION GetWeather(lon float, lat float)
    RETURNS float
    AS $$
    import urllib2
    import simplejson as json

    def get_temp(lat, lon):
    data = urllib2.urlopen(
    "http://api.openweathermap.org/data/2.1/find/station?lat=%s&lon=%s&cnt=1"% (lat, lon))
    js_data = json.load(data)
    try:
    return js_data['list'][0]['main']['temp']
    except (KeyError, IndexError):
        return None

    $$ LANGUAGE plpythonu;

我只有plpython3u ,但它也應該適用於使用plpythonu Python 2.7(只需更改以下部分,別無其他)。

CREATE OR REPLACE FUNCTION GetWeather(lon float, lat float)
  RETURNS float AS $$
import sys
if sys.version_info[0] == 2:
    from urllib2 import urlopen
else:  # Python 3
    from urllib.request import urlopen
import json

def get_temp(lon, lat):
    data = urlopen(
        "http://api.openweathermap.org/data/2.1/find/station?lat=%s&lon=%s&cnt=1"
        % (lat, lon))
    js_data = json.loads(data.read().decode('utf-8'))
    try:
        return js_data['list'][0]['main']['temp']
    except (KeyError, IndexError):
        return None

return get_temp(lon, lat)
$$ LANGUAGE plpython3u;

請注意,上面是使用4位縮進約定(PEP 8)的 如果您不熟悉Python,建議您閱讀一些教程,以了解縮進的語法和用法。

您的數據結構有誤(是的,縮進很重要...)無論如何,這是為您提供的解決方案:

def get_temp(lat, lon):
    data = urllib2.urlopen(
    "http://api.openweathermap.org/data/2.1/find/station?lat=%s&lon=%s&cnt=1"% (lat, lon))
    js_data = json.load(data)
    try:
        return js_data['list'][0]['main']['temp']
    except (KeyError, IndexError):
        return None

輸出:

In [121]: get_temp(50,50)
Out[121]: 275.15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM