-4

「無効な構文」エラーが表示される理由がわかりません。私は 1 時間の調査を行いましたが、成功しませんでした。PYTHON 3 を実行しています。このコードのどこに構文エラーがありますか?

  from urllib.request import urlopen
  import json

  request = urlopen("http://api.aerisapi.com/observations/Urbandale,IA?client_id=QD2ToJ2o7MKAX47vrBcsC&client_secret=0968kxX4DWybMkA9GksQREwBlBlC4njZw9jQNqdO")
  response = request.read().decode("utf-8")
  json = json.loads(response)
  if json['success']:
      ob = json['respnose']['ob']
      print ("the current weather in urbandale is %s with a temperature of %d") % (ob['weather'].lower(), ob['tempF']
 else
      print "An error occurred: %s" % (json['error']['description'])
 request().close 
4

3 に答える 3

8

いくつかの理由:

  1. 括弧のバランスが取れていません:

    print ("the current weather in urbandale is %s with a temperature of %d") % (ob['weather'].lower(), ob['tempF']
    

    それは閉じ括弧が 1 つ欠けており、あなたが持っている括弧は間違った位置にあります。

    これは次のようになります。

    print ("the current weather in urbandale is %s with a temperature of %d" % (ob['weather'].lower(), ob['tempF']))
    
  2. あなたのelseステートメントには:コロンがありません。

  3. 2 番目printの関数は関数ではなく、代わりに Python 2 ステートメントのふりをしています。括弧を追加して修正します。

    print("An error occurred: %s" % (json['error']['description']))
    
  4. インデントが間違っているようですが、投稿エラーの可能性があります。

  5. 最後の行も無効です。close()ではなく、を呼び出したいrequest():

    request.close()
    

    ではurllib、実際にオブジェクトを閉じる必要はありません。

  6. つづりを間違えましたrespnose:

    ob = json['response']['ob']
    

作業コード:

from urllib.request import urlopen
import json

request = urlopen("http://api.aerisapi.com/observations/Urbandale,IA?client_id=QD2ToJ2o7MKAX47vrBcsC&client_secret=0968kxX4DWybMkA9GksQREwBlBlC4njZw9jQNqdO")
response = request.read().decode("utf-8")
json = json.loads(response)
if json['success']:
    ob = json['response']['ob']
    print("the current weather in urbandale is %s with a temperature of %d" % (ob['weather'].lower(), ob['tempF']))
else:
    print("An error occurred: %s" % (json['error']['description']))
于 2013-06-27T16:52:47.350 に答える
2

:後が必要elseです;

else:
      print "An error occurred: %s" % (json['error']['description'])

(この行のとの数が)等しくありません:

>>> strs = """print ("the current weather in urbandale is %s with a temperature of %d") % (ob['weather'].lower(), ob['tempF']"""
>>> strs.count('(')
3
>>> strs.count(')')
2

if-else次のように適切にインデントする必要があります。

if json['success']:
    ob = json['respnose']['ob']
    print ("the current weather in urbandale is %s with a temperature of %d") % (ob['weather'].lower(), ob['tempF'])
else:
    print "An error occurred: %s" % (json['error']['description'])
于 2013-06-27T16:52:32.680 に答える
0

この線

print ("the current weather in urbandale is %s with a temperature of %d") % (ob['weather'].lower(), ob['tempF']

締めくくりがありません)

そのはず

print ("the current weather in urbandale is %s with a temperature of %d" % (ob['weather'].lower(), ob['tempF']))

Python はおそらく次の行で文句を言っているでしょう。

于 2013-06-27T16:52:24.373 に答える