python - ZeroDivisionError

时间:2016-02-25 08:16:46

标签: python-2.7 progress-bar

我创建了一个将数据复制到特定位置的脚本。我试图做的是通过进度条打印结果。我尝试使用包: - > https://pypi.python.org/pypi/progressbar2

这是我的代码:

src = raw_input("Enter source disk location: ")
src = os.path.abspath(src)
dst = raw_input("Enter first destination to copy: ")
dst = os.path.abspath(dst)
dest = raw_input("Enter second destination to move : ")
dest = os.path.abspath(dest)

for dir, dirs, files in os.walk(src):
    if any(f.endswith('.mdi') for f in files):
         dirs[:] = []  # do not recurse into subdirectories
         continue  # ignore this directory

    files = [os.path.join(dir, f) for f in files]

    progress, progress_maxval = 0, len(files) pbar = ProgressBar(widgets=['Progress ', Percentage(), Bar(), ' ', ETA(), ],maxval=progress_maxval).start()

    debug_status = ''


 for list in files:

        part1 = os.path.dirname(list)
        part2 = os.path.dirname(os.path.dirname(part1))
        part3 = os.path.split(part1)[1]
        path_miss1 = os.path.join(dst, "missing_mdi")
        # ---------first location-------------------#
        path_miss = os.path.join(path_miss1, part3)
        # ---------second location-------------------#
        path_missing = os.path.join(dest, "missing_mdi")

        try:
            # ---------first location-------------------#
            if not os.path.exists(path_miss):
                os.makedirs(path_miss)
            else:
                pass

            if os.path.exists(path_miss):
                distutils.dir_util.copy_tree(part1, path_miss)
            else:
                debug_status += "missing_file\n"
                pass

            if (get_size(path_miss)) == 0:
                os.rmdir(path_miss)
            else:
                pass

            # ---------second location-------------------#
            if not os.path.exists(path_missing):
                os.makedirs(path_missing)
            else:
                pass

            if os.path.exists(path_missing):
                shutil.move(part1, path_missing)
            else:
                debug_status += "missing_file\n"

            if (get_size(path_missing)) == 0:
                os.rmdir(path_missing)
            else:
                pass
        except Exception:
            pass
        finally:
            progress += 1
            pbar.update(progress)

    pbar.finish()
    print debug_status

当我尝试执行它时,我收到了错误,我的追溯记录如下:

Traceback (most recent call last):
  File "<string>", line 254, in run_nodebug
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\CopyClass.py",  in <module>
    pbar = ProgressBar(widgets=['Progress ', Percentage(), Bar(), ' ', ETA(),],maxval=progress_maxval).start()
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\progressbar\__init__.py",  in start
    self.update(0)
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\progressbar\__init__.py", line 283, in update
    self.fd.write(self._format_line() + '\r')
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\progressbar\__init__.py", line 243, in _format_line
    widgets = ''.join(self._format_widgets())
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\progressbar\__init__.py", line 223, in _format_widgets
    widget = format_updatable(widget, self)
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\progressbar\widgets.py",  in format_updatable
    if hasattr(updatable, 'update'): return updatable.update(pbar)
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\progressbar\widgets.py",  in update
    return '%3d%%' % pbar.percentage()
  File "C:\Users\kostrzew\Desktop\REPORTS\ClassCopy\progressbar\__init__.py", line 208, in percentage
    return self.currval * 100.0 / self.maxval
ZeroDivisionError: float division by zero

我知道&#34; maxval = progress_maxval&#34;存在问题。因为它不能被零分开。

我的问题是,如何改变它?我应该创建例外来忽略零吗?怎么做?

1 个答案:

答案 0 :(得分:3)

我认为在ProgressBar中它试图将其分为零。它计算如下:

max_value - 100%

progress_value - x,如果我们找到x,可以从这个公式中找到?将是这样:

x =(100 * progress_value)/ max_value

对于此解决方案设置1而不是0表示max_value。