我们从Python开源项目中,提取了以下13个代码示例,用于说明如何使用ast.increment_lineno()。
def test_increment_lineno(self): src = ast.parse('1 + 1', mode='eval') self.assertEqual(ast.increment_lineno(src, n=3), src) self.assertEqual(ast.dump(src, include_attributes=True), 'Expression(body=BinOp(left=Num(n=1, lineno=4, col_offset=0), ' 'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, ' 'col_offset=0))' ) # issue10869: do not increment lineno of root twice src = ast.parse('1 + 1', mode='eval') self.assertEqual(ast.increment_lineno(src.body, n=3), src.body) self.assertEqual(ast.dump(src, include_attributes=True), 'Expression(body=BinOp(left=Num(n=1, lineno=4, col_offset=0), ' 'op=Add(), right=Num(n=1, lineno=4, col_offset=4), lineno=4, ' 'col_offset=0))' )
def _get_function(self, name, context): snippet = self.config.data['autoinstall'].get(name) if not snippet: return None code = 'def {}():\n{}'.format(name, textwrap.indent(snippet, ' ')) tree = ast.parse(code, filename=self.env.config_file) ast.increment_lineno(tree, snippet.start_mark.line) co = compile(tree, filename=self.env.config_file, mode='exec') stage = {} exec(co, context, stage) return stage[name]
def print_callexp(*args, **kwargs): # get some info from 'inspect' frame = inspect.currentframe() backf = frame.f_back this_func_name = frame.f_code.co_name # get the source code of caller's module # note that we have to reload the entire module file since the # inspect.getsource() function doesn't work in some cases (i.e.: returned # source content was incomplete... Why?!). # --> is inspect.getsource broken??? # source = inspect.getsource(backf.f_code) #source = inspect.getsource(backf.f_code) with open(backf.f_code.co_filename, "r") as f: source = f.read() # get the ast node of caller's module # we don't need to use ast.increment_lineno() since we've loaded the whole # module ast_root = ast.parse(source, backf.f_code.co_filename) #ast.increment_lineno(ast_root, backf.f_code.co_firstlineno - 1) # find caller's ast node caller_node = _find_caller_node(ast_root, this_func_name, backf.f_lineno) # now, if caller's node has been found, we have the first line and the last # line of the caller's source if caller_node: #start_index = caller_node.lineno - backf.f_code.co_firstlineno #end_index = backf.f_lineno - backf.f_code.co_firstlineno + 1 print("Hoooray! Found it!") start_index = caller_node.lineno - 1 end_index = backf.f_lineno lineno = caller_node.lineno for ln in source.splitlines()[start_index:end_index]: print(" {:04d} {}".format(lineno, ln)) lineno += 1 ####################################################################################################
def execute_code_block(src_file, code_block, lineno, example_globals, block_vars, gallery_conf): """Executes the code block of the example file""" time_elapsed = 0 # If example is not suitable to run, skip executing its blocks if not block_vars['execute_script']: return '', time_elapsed plt.close('all') cwd = os.getcwd() # Redirect output to stdout and orig_stdout = sys.stdout src_file = block_vars['src_file'] # First cd in the original example dir, so that any file # created by the example get created in this directory my_stdout = MixedEncodingStringIO() os.chdir(os.path.dirname(src_file)) sys.stdout = my_stdout try: code_ast = ast.parse(code_block, src_file) ast.increment_lineno(code_ast, lineno - 1) t_start = time() # don't use unicode_literals at the top of this file or you get # nasty errors here on Py2.7 exec(compile(code_ast, src_file, 'exec'), example_globals) time_elapsed = time() - t_start except Exception: sys.stdout = orig_stdout except_rst = handle_exception(sys.exc_info(), src_file, block_vars, gallery_conf) code_output = u"\n{0}\n\n\n\n".format(except_rst) else: sys.stdout = orig_stdout os.chdir(cwd) my_stdout = my_stdout.getvalue().strip().expandtabs() if my_stdout: stdout = CODE_OUTPUT.format(indent(my_stdout, u' ' * 4)) logger.verbose('Output from %s', src_file, color='brown') logger.verbose(my_stdout) else: stdout = '' images_rst, fig_num = save_figures(block_vars['image_path'], block_vars['fig_count'], gallery_conf) block_vars['fig_count'] += fig_num code_output = u"\n{0}\n\n{1}\n\n".format(images_rst, stdout) finally: os.chdir(cwd) sys.stdout = orig_stdout return code_output, time_elapsed
def register(name, handler, mask=None, filename=None, lineno=None): """Register an Event handler""" # already registered if name in _handlers: return AlreadyRegistered if handler is not None: # handle string containing python code if isinstance(handler, str): tmp = "def %s(e):\n%s" % (name, handler) try: code = bb.methodpool.compile_cache(tmp) if not code: if filename is None: filename = "%s(e)" % name code = compile(tmp, filename, "exec", ast.PyCF_ONLY_AST) if lineno is not None: ast.increment_lineno(code, lineno-1) code = compile(code, filename, "exec") bb.methodpool.compile_cache_add(tmp, code) except SyntaxError: logger.error("Unable to register event handler '%s':\n%s", name, ''.join(traceback.format_exc(limit=0))) _handlers[name] = noop return env = {} bb.utils.better_exec(code, env) func = bb.utils.better_eval(name, env) _handlers[name] = func else: _handlers[name] = handler if not mask or '*' in mask: _catchall_handlers[name] = True else: for m in mask: if _event_handler_map.get(m, None) is None: _event_handler_map[m] = {} _event_handler_map[m][name] = True return Registered