【问题标题】:The logic in main() does not seem to hit the else condition - whymain() 中的逻辑似乎没有达到 else 条件 - 为什么
【发布时间】:2017-09-16 20:55:16
【问题描述】:

我在下面有一个函数,它查看路径,并确定使用了多少磁盘空间。

def check_disk_space():
    import os
    cmdparts = ["echo $(df --output=pcent ", ") | tr -d 'Use% '"]
                check_used_disk_space_cmd =  cmdparts[0] + "a/path" + cmdparts[1]
    os.system(check_used_disk_space_cmd)

def main():
    used_disk_space = check_disk_space()
    print type( used_disk_space )
    if  int(used_disk_space) > 80:
        print "need more"
    else:
        print "plennnty!"
        print type( used_disk_space )
main()

check_disk_space() 正在返回 85

更新:似乎 check_disk_space() 正在创建一个NoneType 对象?我收到此错误: TypeError: int() argument must be a string or a number, not 'NoneType'

【问题讨论】:

  • 因为你实际上并没有调用这个函数,即使你调用了它也不会返回任何东西。
  • 您需要捕获 os.system 调用的输出,并在 check_disk_space 方法中将其转换为 INT 或 FLOAT。我会看看subprocess.Popen 类。
  • 请查看更新后的 main - 这是在抛出 plenty,而它实际上应该是 need more

标签: python comparison comparison-operators


【解决方案1】:

我在您的代码中更改了几处。

  1. 您的函数没有返回任何值
  2. import os 可以移到文件顶部

注意:我在打印语句中添加了大括号。

import os

def check_disk_space():
    """
    check_disk_space() checks the available space of a specified path
    """
    cmdparts = ["echo $(df --output=pcent ", ") | tr -d 'Use% '"]
    check_used_disk_space_cmd =  cmdparts[0] + "C:/Users/jgosalia/Desktop" + cmdparts[1]
    return os.system(check_used_disk_space_cmd)

def main():
    space = check_disk_space()
    print("Space : " + str(space))
    if space > 95:
        print ("need more")
    else:
        print ("plennnty!")

main()

样品运行 1:

===== RESTART: C:/filesOperation.py =====
Space : 255
need more

if condition> 更改为 < 以检查其他条件并且它可以工作。

样品运行 2:

===== RESTART: C:/filesOperation.py =====
Space : 255
plennnty!

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2018-11-09
    • 2012-01-16
    • 2020-08-01
    相关资源
    最近更新 更多