2016-11-28 5 views
-1

Python calendar.monthrange関数を使用して1か月間の日数を印刷しようとしています。Pythonで変数を使用しているときのエラーcalendar.monthrange

私は毎月1日にcronで実行され、前の月の日数を返す必要があるスクリプトを用意しています。 また、矢印モジュールを使用して、スクリプト全体で使用している日付/時刻の呼び出しをより適切に処理し、フォーマットします。

前の月の日数は、スクリプトが実行されている日から1日後であるため、私はtimedeltaで1を引いただけです。ここで

は私のコードの非常に減少したバージョンであるが、これは働い一部です:

import calendar 
import arrow 
import time 
from datetime import date, timedelta 

yesterday = date.today() - timedelta(1) 

cYfDate = yesterday.strftime('%Y.%m.%d') 
cYfDateY = arrow.get(cYfDate).format('YYYY') 
cYfDateM = arrow.get(cYfDate).format('M') 

print cYfDateY 
print cYfDateM 

print calendar.monthrange(cYfDateY + ',' + cYfDateM)[1] 

最初の2本の印刷ラインが完全に動作し、&月正しい年を表示しかし、第三の印刷でエラーが発生します:

Traceback (most recent call last): 
    File "/home/pi/SystemChecker.py", line 15, in <module> 
    print calendar.monthrange(cYfDateY + ',' + cYfDateM) 
TypeError: monthrange() takes exactly 2 arguments (1 given) 

明らかに2つある場合は、なぜ1つの議論しかないのかわかりません。

+0

エラーがクリアされている、あなたは2つの引数の代わりに、1 – ettanany

+0

を渡す必要があり、私はそのお持ちでない場合は:cYfDateY&cYfDateM? – 1cm69

+1

'calendar.monthrange(cYfDateY、cYfDateM)'のようなもの – ettanany

答えて

1

当面の問題はmonthrange 2つの引数を期待しているということです。何らかの理由であなたが持っている2つの引数を取って、それらを両方とも1つの文字列に結合しています。それをしないでください。ただ引数を渡す:

calendar.monthrange(cYfDateY, cYfDateM) 

スクリプトの残りの部分は、しかし、あまりにも奇妙です。昨日の日付を正しく計算した後、文字列に変換し、サードパーティのarrowライブラリを使用して、その文字列から月と日を取得します。これらは今や文字列であるため、これは機能しません。なぜあなたはこれをやっている?なぜあなたはすでに持っていた月と日付を取得しないのですか?

yesterday = date.today() - timedelta(1) 
cYfDateY = yesterday.year 
cYfDateM = yesterday.month 
+0

私は謝罪しました。私は矢印モジュールを他の場所で使用していましたが、使用が快適ですが、より短く、より短時間の方法があることを知らなかった – 1cm69

+0

パーフェクト、今すぐに感謝しています。 – 1cm69

1

calendar.monthrange()は2つの引数、すなわちyearmonthをとります。詳細はこちらドキュメントを確認してください:

calendar.monthrange(year, month)

+0

情報ありがとうございました – 1cm69

1

変更print calendar.monthrange(cYfDateY + ',' + cYfDateM)[1]
`印刷calendar.monthrange(cYfDateY、cYfDateM)に、[1]

+0

ありがとう、私は約1時間それを見つめた後、私の愚かなエラーを実現した、ドゥ – 1cm69

関連する問題