在Python

时间:2017-04-27 11:13:01

标签: python-3.x import global-variables

我有一个文件global_vars.py,其中包含保存为变量的文件路径:

from pandas import Timestamp
final_vol_path = 'datasets/final_vols.csv'
final_price_path = 'datasets/final_prices.csv'
final_start_date = Timestamp('2017-01-01')

以其他类似方式编写的变量。但是,当我尝试在FileNotFoundError中执行以下操作时,我用来读取数据的函数会抛出file1.py

import scripts.global_vars as gv
read_data(gv.final_vol_path, gv.final_price_path) # throws FileNotFoundError
read_data('datasets/final_vols.csv', 'datasets/final_prices.csv') # this passes

此外,我已检查过文件路径,并获得以下信息:

gv.final_vol_path == 'datasets/final_vols.csv' # returns True
gv.final_price_path == 'datasets/final_prices.csv' # returns True 

此外,处理pandas Timestamp对象没有任何问题。

是否有任何解释为什么在尝试从FileNotFoundError作为变量访问文件路径时抛出global_vars.py,但在传入实际字符串时不抛出?

编辑:整个目录结构如下:

working_dir
L file1.py
    L scripts
       L global_vars.py
    L datasets
       L final_vols.csv
       L final_prices.csv

编辑2:我在try-catch块中添加了以确保其余功能不会中断,不确定是否影响了追溯,但这是我得到的:

Traceback (most recent call last):
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\runpy.py", line 
184, in _run_module_as_main
        "__main__", mod_spec)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "C:\Users\Ananth\Anaconda3\envs\analytics-cpu\Scripts\nose2.exe\__main__.py", line 9, in <module>
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 306, in discover
        return main(*args, **kwargs)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 100, in __init__
        super(PluggableTestProgram, self).__init__(**kw)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\unittest\main.py", line 93, in __init__
        self.parseArgs(argv)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 133, in parseArgs
        self.createTests()
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\main.py", line 258, in createTests
        self.testNames, self.module)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\loader.py", line 69, in loadTestsFromNames
        for name in event.names]
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\loader.py", line 69, in <listcomp>
        for name in event.names]
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\loader.py", line 84, in loadTestsFromName

        result = self.session.hooks.loadTestsFromName(event)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\events.py", line 224, in __call__
        result = getattr(plugin, self.method)(event)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\plugins\loader\testcases.py", line 56, in loadTestsFromName
        result = util.test_from_name(name, module)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\util.py", line 106, in test_from_name
        parent, obj = object_from_name(name, module)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\nose2\util.py", line 117, in object_from_name
        module = __import__('.'.join(parts_copy))
      File "C:\Users\Ananth\Desktop\Modules\PortfolioVARModule\tests\test_simulation.py", line 24, in <module>
        gv.test_start_date)
      File "C:\Users\Ananth\Desktop\Modules\PortfolioVARModule\scripts\prep_data.py", line 119, in read_data
        priceDF = pd.read_csv(pricepath).dropna()
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 646, in parser_f
        return _read(filepath_or_buffer, kwds)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 389, in _read
        parser = TextFileReader(filepath_or_buffer, **kwds)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 730, in __init__
        self._make_engine(self.engine)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 923, in _make_engine
        self._engine = CParserWrapper(self.f, **self.options)
      File "c:\users\ananth\anaconda3\envs\analytics-cpu\lib\site-packages\pandas\io\parsers.py", line 1390, in __init__
        self._reader = _parser.TextReader(src, **kwds)
      File "pandas\parser.pyx", line 373, in pandas.parser.TextReader.__cinit__ (pandas\parser.c:4184)
      File "pandas\parser.pyx", line 667, in pandas.parser.TextReader._setup_parser_source (pandas\parser.c:8449)
    FileNotFoundError: File b'datasets/corn_price.csv' does not exist

1 个答案:

答案 0 :(得分:2)

问题是在文件路径前添加了字母b。 你得到了b,因为你编码为utf-8。 尝试:

read_data(str(gv.final_vol_path,'utf-8'), str(gv.final_price_path, 'utf-8'))