简体   繁体   English

SyntaxError:语法无效( <string> )

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

I have python 2.7 and I have weather script which returns temperature infos, I would like to implement this script into PostgreSQL. 我有python 2.7,并且我有返回温度信息的天气脚本,我想将此脚本实现到PostgreSQL中。 I always got this error: DETAIL: SyntaxError: invalid syntax (<string>, line 10) 我总是收到此错误: DETAIL: SyntaxError: invalid syntax (<string>, line 10)

code: 码:

    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;

I tried this version too, but its not working 我也尝试过此版本,但无法正常工作

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;

I only have plpython3u , but it should also work for Python 2.7 using plpythonu (just change that part of the following and nothing else). 我只有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;

Note that the above is with a 4-space indent convention (PEP 8) . 请注意,上面是使用4位缩进约定(PEP 8)的 If you are new to Python, I'd recommend going through a few tutorials to understand the syntax and use of indents. 如果您不熟悉Python,建议您阅读一些教程,以了解缩进的语法和用法。

You got your data structure wrong (yeah, indentation matters...) Anyway, here is solution for you: 您的数据结构有误(是的,缩进很重要...)无论如何,这是为您提供的解决方案:

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

Output: 输出:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM