【问题标题】:better format than using try and except比使用 try 和 except 更好的格式
【发布时间】:2014-04-17 02:12:18
【问题描述】:

我目前正在制作一个程序,允许我在用户指定的目录中搜索文件。但是我在压缩我的tryexcept 语句时遇到了一些麻烦。我目前的代码如下:

if os.path.exists(file_path)!= True:
        print('\n******* Path does not exist. *******\n')       

    else:
        while True:
            aa = '''\nWhich search characteristics would you like to use? \n 1. Search by name: N \n 2. Search by extension: E \n 3. Search by size: S
                \n    Please enter your choice: '''

            answer = input(aa).strip()

            if answer not in 'NnEeSs' or answer=='':
                print('\n***** Invalid choice. *****')

            elif answer in 'Nn':
                while True:
                    try:
                        name = input ('\nEnter file name: ')
                        rr = search_by_name(name, file_path)
                        if not rr:
                            print('\n***** File not found *****\n')
                        else:
                            break

                    except WindowsError:
                        print('\n***** Oops! Access denied.*****\n')
                        continue


            elif answer in 'Ee':
                while True:
                    try:
                        ending = input ('\nEnter the file extension: ')
                        rr = search_by_extention(ending, file_path)
                        if not rr:
                            print('\n***** No File(s) found *****\n')
                        else:
                            break

                    except WindowsError:
                        print('\n***** Oops! Access denied. *****\n')
                        continue              

            elif answer in 'Ss':
                while True:
                    try:
                        size = int(input('\nPlease enter file size: '))
                        rr = search_by_size(size, file_path)
                        if not rr:
                            print('\n***** No file(s) found *****\n')
                        else:
                            break

                    except ValueError:
                        print('\n***** Enter an numeric value. *****\n')
                        continue

                    except WindowsError:
                        print('\n***** Oops! Access denied. *****\n')
                        continue

在每种情况下或总体上,是否有更好的压缩方式来编写上述代码?每个搜索函数都会返回一个包含代码结果的列表。

【问题讨论】:

  • 属于codereview网站...

标签: python-3.x try-except


【解决方案1】:

我有几个建议:

1。改进缩进。

在您的文件顶部有:

if os.path.exists(file_path)!= True:
    print('\n******* Path does not exist. *******\n')       

    else:

else 语句必须具有与原始 if 相同的缩进值。

2。删除换行符

由于您担心占用空间,只需删除所有换行符。我不建议这样做,因为您的代码可能会让人难以阅读,但如果您对空间很执着,请继续。我可以数出 11 个换行符,所以如果您删除这些换行符,您就删除了 15th 个文件。

3。是pythonic

如果您关心代码占用的,请尽量使每一行都像 Python 一样,以备将来查看/编辑。而不是if x in 'Ss': 来检查xs 还是S,只需执行if x.lower() == 's':

4。格式try... except

您的try... except 包含您的大部分代码。尝试仅将它们限制在可能引发错误的行。这是一个例子:

try:
    var = int(raw_input())
    x = float(var)/100.0
    if x == 1:
        print 'YAY'
    else:
        print 'BOO!'
    for k in range(1, x):
        print 'this has looped %d times' %(k)
except ValueError:
    print 'Your input is not in a number format!'

在这段代码中,我们要确保输入是一个数字。但是,这只能通过第一行检查,其他一切都是垃圾。因此,只需围绕第一行,其余部分保持不变。

注意:

不要从您的try... except 中删除必要的组件,否则可能会引发一些任意错误。

5。缩小你的 while 循环

而不是执行以下代码:

while True:
    try:
        size = int(input('\nPlease enter file size: '))
        rr = search_by_size(size, file_path)
        if not rr:
            print('\n***** No file(s) found *****\n')
        else:
            break

    except ValueError:
        print('\n***** Enter an numeric value. *****\n')
        continue

你可以的

size = input('\nPlease enter file size: ')
while size.isdigit() == False or not rr = search_by_size(size, file_path):
    size = input('\nPlease enter file size: ')

您编辑的代码:原文:59 行已编辑:33 行

if os.path.exists(file_path)!= True:
    print('\n******* Path does not exist. *******\n')
else:
    while True:
        aa = '''\nWhich search characteristics would you like to use? \n 1. Search by name: N \n 2. Search by extension: E \n 3. Search by size: S
            \n    Please enter your choice: '''
        answer = input(aa).strip()
        if answer not in 'NnEeSs' or answer=='':
            print('\n***** Invalid choice. *****')
        elif answer.lower() == 'n':
            name = input ('\nEnter file name: ')
            try:
                while not search_by_name(name, file_path):
                    name = input ('\nEnter file name: ')
            except WindowsError:
                print('\n***** Oops! Access denied.*****\n')
                continue
        elif answer .lower() == 'e':
            ending = input ('\nEnter the file extension: ')
            try:
                while not search_by_extention(ending, file_path):
                    ending = input ('\nEnter the file extension: ')
            except WindowsError:
                print('\n***** Oops! Access denied. *****\n')
                continue
        elif answer.lower() == 's':
            size = input('\nPlease enter file size: ')
            try:
                while size.isdigit() == False or not search_by_size(size, file_path):
                    size = input('\nPlease enter file size: ')
            except WindowsError:
                print('\n***** Oops! Access denied. *****\n')
                continue

【讨论】:

    猜你喜欢
    • 2015-09-18
    • 1970-01-01
    • 2014-01-28
    • 2016-04-06
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多