2017-09-05 21 views
3

ArcGISでArcpyで作業していて、前月の最終日にフィールドを更新するコードを作成しようとしています(つまり、今日コードを実行すると2017-09- 01、それは2017-08-31でフィールドを更新します)。CalculateFieldを使用して日付フィールドを更新する

私は手動場計算を行う場合、私はそれがVBScriptと前ロジックスクリプトコードを使用して動作するように取得することができます。

Dim FC 
FC = DateSerial(Year(Date), Month(Date), 0) 

と等しくFCにフィールドを設定する:

see image here

これをコードに統合しようとしましたので、自動的に実行するように設定できますが、運が無かったのです。誰かが私が下のコードでどこが間違っているのかを特定できますか?

import arcpy 

inTable = r'C:\1 Block Watch Cr\Base_Data.gdb\Districts' 
field = "Final_Date" 
exp = 'getdate()' 
codeblock = '''def getdate(): 
    DateSerial(Year(Date()), Month(Date()), 0)''' 

arcpy.CalculateField_management(inTable, field, exp, "VB", codeblock) 

私は、次のエラーメッセージを取得しています:あなたは「サブの呼び出し中には括弧を使用することはできません」というエラーを取得している

screenshot of error message

+0

エラーが表示されますか? – Akash

+0

更新されたポストを見る - 私は画像を追加しました。 – AmandaNicole

答えて

0

。これは、VBScriptの関数呼び出しの次のルールである:VBScriptで関数を呼び出すの

3つの方法:

  • fn a,b - この方法を使用するとき、あなたは、パラメータ・リストを同梱できません括弧
  • Call fn(a,b)は - あなたが明示的に呼び出しキーワードを書くとき、あなたは括弧
  • c=fn(a,b)にパラメータリストを囲む必要があります - あなたは、変数に関数が返す値を代入するとき、あなたは目を囲む必要があります括弧内のeパラメータリスト。

これらのルールについてよく理解するには、answerにチェックを入れてください。あなたのケースで何が起こった

:あなたが投稿VBScriptコードで

は、あなたが第三の方法を使用して、あなたは括弧内のパラメータリストを囲むことで、ルールに従いました。したがって、正常に動作しました。

Pythonコードでは、第1の方法であるDateSerial(Year(Date()), Month(Date()), 0)を単純に使用しています。第1の方法のルールによれば、パラメタリストをかっこで囲んではいけません。 param-listをかっこで囲んだので、そのルールに違反し、そのエラーが発生しました。

考えられる解決策:

いずれに以下のように括弧を除去することにより、正しく呼び出し方法1を使用します。

codeblock = '''def getdate(): 
    DateSerial Year(Date()), Month(Date()), 0''' 

または明示的に実際に関数を呼び出す前にcallキーワードを記述します。

codeblock = '''def getdate(): 
    Call DateSerial(Year(Date()), Month(Date()), 0)''' 

または、結果の日付を次のように変数に格納してみてください。

codeblock = '''def getdate(): 
    varDate = DateSerial(Year(Date()), Month(Date()), 0)''' 

私はpythonを知らないことに注意してください。だから、あなたが書いたPythonコードが正しいかどうかは私が推測しています。このエラーはvbScript固有のものであり、この回答を書いています。

関連する問題