python
  • min
  • argparse
  • 2014-04-10 50 views 0 likes 
    0

    我試圖在Python2.4和2.6上使用min()和argparse。我有以下代碼在2.6中正常工作,但在2.4中給我一個語法錯誤。我已經瀏覽了2.4版的文檔,試圖弄清楚這一點,並使用2.4的一些例子,但一直沒有找到。據我所知,Argparse在2.4版本中工作正常。在Python2.4和2.6上使用min()

    線argparse:

    parser.add_argument("--no-alert-on-critical", action='store_true', help='disable critical alerts and dashboard status\'s for this check (default: yes)') 
    

    設置變量:

    critical_status_exit_code = min(1 if args.no_alert_on_critical else 2, 
               0 if args.no_alert_on_warning and args.no_alert_on_critical else 2) 
    

    感謝

    +0

    你能張貼異常的痕跡?它可能有助於縮小問題的範圍? (也許?)...不知道... – BorrajaX

    回答

    1

    或者只是跳過使用MIN()......

    def calc_code(): 
        # pick a better function name 
        if args.no_alert_on_critical: 
         if args.no_alert_on_warning: 
          return 0 
         return 1 
        return 2 
    
    critical_status_exit_code = calc_code() 
    

    或者......

    critical_status_exit_code = 2 
    if args.no_alert_on_critical: 
        critical_status_exit_code -= 1 
        if args.no_alert_on_warning: 
         critical_status_exit_code -= 1 
    
    +0

    你的第一個答案是最好的,因爲我在多個文件上這樣做,但我不想爲每個退出狀態創建多個函數(關鍵,未知,警告)你的第二個答案是我正在實現的,它是最簡單的最容易閱讀。 – Matty

    +0

    如果您在某些地方重複使用,您可以隨時使用某個功能並傳遞狀態代碼(如果它們不同)。另外,在第二個例子中,它可能更易於使用1和0,而不是每個= 1。我同意亞歷克斯提供這個問題的實際原因,但有時候看好總體目標是有益的,因爲有時候會有更簡單的解決方案。 – pcm

    2

    三元經營者只有在Python 2.5增加,所以在這之前的任何版本將扔在一個SyntaxError迴應一個。你必須定義變量很長的路要走,有ifelse聲明:

    if args.no_alert_on_critical: 
        var = 1 
    else: 
        var = 0 
    

    做,與所有你的價值觀,然後通過它們被存儲到min()的變量。

    +0

    我接受另一個答案,因爲它更簡單,但我仍然upvoting你的,因爲你解釋了爲什麼我的代碼不起作用,這對我來說同樣重要。 – Matty

    相關問題